1. وصف المشهد
نمط البناء هو نفس نمط المصنع ونمط المصنع التجريدي ، ويستخدم لإنشاء كائنات فئة موروثة.
وضع المصنع: وضع مصنع تصميم Java
نمط المصنع التجريدي: نمط تصميم جافا النمط المصنع التجريدي
الفرق هو أنه في وضع المصنع ، يقوم كل فئة فرعية بتنفيذ واجهات وإنشاء كائنات فئة فرعية من خلال فئة المصنع ؛ أثناء وجوده في وضع البناء ، تحتوي كل فئة فرعية على فئة البناء الخاصة بها ، وتنشئ كائنات فئة من الوالدين المختلفة من خلالها ، وتنفيذ تعدد الأشكال في النهاية. في الواقع ، لا توجد فئات فرعية وفئات الوالدين في الكود.
أخذ أداة الحصول على بيانات الأداة كمثال ، في وضع المصنع ، حدد الواجهة "أداة الحصول على بيانات الأدوات" ، وتحديد الفئات الفرعية "أداة الحصول على بيانات ملف PDF" و "أداة الحصول على بيانات ملف Excel" ، وتنفيذ الواجهة في الفئة الفرعية. يتم إنشاء كائنات الفئة الفرعية من خلال فئات المصنع (سواء كانت فئة مصنع ثابت أو فئة مصنع مجردة) ، وهذه الكائنات لها تعبيرات مختلفة ، أي تعدد الأشكال.
في وضع البناء ، حدد فئة الأصل "أداة الحصول على بيانات الأدوات" ، ثم استخدم "فئة Builder الخاصة بأداة الحصول على بيانات ملف PDF" و "فئة Builder من أداة الحصول على بيانات ملف Excel" لتعيين طرق تعبير مختلفة (تعيين قيم مختلفة إلى الحقول ، وما إلى ذلك) ، وأخيراً تحقيق متعددة الأشكال.
في وضع البناء ، المخرج يشبه المخرج. يدعو باني باني لإكمال إنشاء كائنات الفصل. يمكن للمتصل الاتصال بالمخرج ، كما هو موضح في الشكل أدناه:
بالطبع ، يتم استخدام نموذج المصنع حرفيًا لإنشاء كائنات ، بينما يستخدم نموذج البناء حرفيًا لبناء كائنات مختلفة. يمكن للاثنين تحقيق وظائف مماثلة ، ولكن سيناريوهات التطبيق للاثنين يمكن أن تكون مختلفة جدا.
يتم استخدام نموذج المصنع لإنشاء كائن فئة بسيط ، بينما يتم استخدام نموذج البناء لإنشاء كائن فئة معقد. يمكن تعلم المعلومات المحددة من Baidu.
عند التوسع ، على سبيل المثال ، أضف جمع بيانات ملفات Word وإنشاء فئة Builder الخاصة به ، والتي تنفذ إنشاء برامج جمع بيانات ملفات Word ؛ عند الاتصال ، يمكنك الاتصال به باستخدام فئة WordBuilder.
2. عينة رمز
(الوالد) الفصل:
حزمة lums.designpatterndemo.builderdemo ؛ الطبقة العامة المعدات dataCapture {private string filepath ؛ سلسلة خاصة المعدات. // string public getFilePath () {return this.filePath ؛ } public void setFilePath (String filepath) {this.filePath = filePath ؛ } السلسلة العامة getEquipmentData () {return this.equipmentData ؛ } public void setequipmentData (String EquipmentData) {this.equipmentData = EquiperData ؛ }}واجهة البناء:
Package lums.designpatterndemo.builderdemo ؛ public interface applicedDataCaptureBuilder {// component void buildfilepath () ؛ void buildequipmentData () ؛ // تجميع المعدات dataCapture buildequipmentDataCapture () ؛}فئة منشئ جمع بيانات PDF:
Package lums.designpatterndemo.builderdemo ؛ public pdffileCaptureBuilder تنفذ المعدات depatacapturebuilder {// equiptDataCapture capture ؛ // بناء pdffileCaptureBuilder () {capture = new ExplyDataCapture () ؛ } // Override public void buildfilepath () {capture.setFilePath (". pdf") ؛ } Override public void buildequipmentData () {capture.setequipmentData ("محتوى ملف pdf") ؛ } Override Public EquipmentDataCapture buildequipmentDataCapture () {return capture ؛ }}Excel Builder Builder:
Package lums.designpatterndemo.builderdemo ؛ public excelfileCaptureBuilder تنفذ EquipmentDataCaptureBuilder {// equiptDataCapture capture ؛ // بناء public ExcelfIleCaptureBuilder () {capture = new EquipmentDataCapture () ؛ } Override public void buildfilepath () {capture.setFilePath (". xlsx") ؛ } Override public void buildequipmentData () {capture.setequipmentData ("محتوى ملف excel") ؛ } Override Public EquipmentDataCapture buildequipmentDataCapture () {return capture ؛ }}فئة المخرج ، يمكن فهمها ببساطة على أنها فئة المخرج:
Package lums.designpatterndemo builder.buildequipmentData () ؛ المعدات dataCapture capture = builder.buildequipmentDataCapture () ؛ التقاط العودة. }}
مثال جانبي الاتصال:
Package lums.designpatterndemo.builderdemo ؛ public class builderdemo {public static void main (string [] args) {equiperDataCapturedirector direcotr = new EquipmentDataCaptureDirector () ؛ المعدات dataCaptureBuilder Builder = جديد pdffileCaptureBuilder () ؛ builder = new ExcelfIleCaptureBuilder () ؛ المعدات dataCapture capture = direcotr.constructeqiupmentDataCapture (builder) ؛ system.out.println (capture.getequipmentData ()) ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.