المناسبات المعمول بها:
7.3 المناسبات القابلة للتطبيق لنموذج المصنع
أسهل طريقة لإنشاء كائن جديد هي استخدام الكلمة الرئيسية الجديدة والفئات الخرسانية. فقط في بعض المناسبات ، يمكن أن يستحق التعقيد الإضافي لإنشاء مصنع للكائنات المال. يلخص هذا القسم هذه المناسبات.
7.3.1 التنفيذ الديناميكي
إذا كنت بحاجة إلى إنشاء كائنات تنفذ الواجهة نفسها بطرق مختلفة ، مثل مثال الدراجة السابق ، يمكنك استخدام طريقة المصنع أو كائن مصنع بسيط لتبسيط عملية تحديد التنفيذ. يمكن إجراء هذا الاختيار بشكل صريح أو ضمني. السابق يشبه مثال الدراجة ، ويمكن للعميل اختيار نموذج الدراجات الذي تحتاجه ؛ في حين أن مثال مصنع XHR المذكور في القسم التالي ينتمي إلى الأخير. يعتمد نوع كائن الاتصال الذي تم إرجاعه في هذا المثال على عوامل عرض النطاق الترددي المكتشفة وتأخير الشبكة. في هذه المواقف ، عادة ما يتعين عليك التعامل مع سلسلة من الفصول التي تنفذ نفس الواجهة ويمكن معالجتها بالتساوي. هذا هو السبب الأكثر شيوعًا لاستخدام نمط المصنع في JavaScript.
7.3.2 حفظ الإعدادات العامة
إذا كانت الكائنات بحاجة إلى أن تكون معقدة وذات صلة ببعضها البعض ، فإن استخدام وضع المصنع يمكن أن يقلل من كمية التعليمات البرمجية المطلوبة لكل كائن. هذا التأثير بارز بشكل خاص إذا كان هذا الإعداد يحتاج فقط إلى إجراء مرة واحدة لجميع الحالات من نوع معين. إن وضع رمز الإعداد هذا في مُنشئ الفئة ليس نهجًا فعالًا ، لأنه حتى إذا تم الانتهاء من العمل ، فسيظل يتم تنفيذ الكود في كل مرة يتم فيها إنشاء مثيل جديد ، وسيقوم القيام بذلك بتوزيع رمز الإعداد على فئات مختلفة. طريقة المصنع مثالية لهذه المناسبة. يمكن تعيينه مرة واحدة قبل إنشاء جميع الكائنات المطلوبة. بغض النظر عن عدد الفئات المختلفة التي يتم تأهيلها ، يمكن لهذه الطريقة الاحتفاظ برمز الإعداد في مكان واحد.
هذا مفيد بشكل خاص إذا كان الفئة المستخدمة تتطلب تحميل المكتبة الخارجية. يمكن لطرق المصنع التحقق من هذه المكتبات وتحميلها ديناميكيًا غير موجودة. توجد رموز الإعدادات هذه في مكان واحد فقط ، لذلك من المفيد تعديلها لاحقًا.
7.3.3 اصنع كائنًا كبيرًا مع العديد من الأشياء الصغيرة
يمكن استخدام طريقة المصنع لإنشاء كائنات تغلف العديد من الكائنات الأصغر. النظر في مُنشئ كائن الدراجة. تحتوي الدراجات على العديد من الأنظمة الفرعية الأصغر: العجلات والإطارات ومكونات الإرسال والفرامل. إذا كنت لا ترغب في اقتران قوي بين النظام الفرعي وكائن أكبر ، ولكنك تريد الاختيار من بين العديد من الأنظمة الفرعية في وقت التشغيل ، فإن نهج المصنع هو خيار مثالي. باستخدام هذه التقنية ، يمكنك مطابقة كل الدراجات التي تبيعها يومًا ما مع نوع من السلسلة ، وإذا وجدت سلسلة أخرى مفضلة أخرى في اليوم التالي ، فيمكنك استخدام هذا التنوع الجديد بدلاً من ذلك. من السهل تنفيذ هذا التغيير لأن منشئو فئات الدراجات هذه لا يعتمدون على مجموعة متنوعة من سلسلة معينة. يوضح مثال قارئ RSS لاحقًا في هذا الفصل استخدام نموذج المصنع في هذا الصدد.
يوفر نمط المصنع بشكل أساسي واجهة لإنشاء كائنات. ينقسم نموذج المصنع إلى ثلاث فئات وفقًا لمصطلحات "Java and Pattern":
1. مصنع بسيط
2. طريقة المصنع
3. مصنع مجردة
هذه الأنماط الثلاثة مجردة تدريجياً من أعلى إلى أسفل وأكثر عمومية. هناك أيضًا طريقة تصنيف ، والتي تتمثل في اعتبار نموذج المصنع البسيط كحالة خاصة لنموذج طريقة المصنع ، ويتم تصنيف الاثنين في نفس الفئة. فيما يلي حالتان يستخدمان وضع المصنع:
1. عند الترميز ، لا يمكنك التنبؤ بأي نوع من الحالات التي تحتاج إلى إنشاؤها.
2. يجب ألا يعتمد النظام على تفاصيل حول كيفية إنشاء مثيلات فئة المنتج ودمجها والتعبير عنها
3. نموذج المصنع البسيط
كما يوحي الاسم ، فإن هذا النموذج نفسه بسيط ويستخدم في المواقف التي يكون فيها العمل أكثر بساطة.
وهو يتألف من ثلاثة أدوار (انظر مخطط الفصل أدناه للعلاقة):
1. دور المصنع: هذا هو جوهر هذا النموذج ، الذي يحتوي على منطق تجاري معين ومنطق الحكم. في Java غالبًا ما يتم تنفيذه بواسطة فئة ملموسة.
2. دور المنتج التجريدي: إنها عمومًا فئة من الوالدين ورثها منتج معين أو واجهة تم تنفيذها. تنفذها واجهات أو فئات مجردة في جافا.
3. دور المنتج المحدد: الكائن الذي أنشأته فئة المصنع هو مثيل لهذا الدور. تنفذها فئة ملموسة في جافا.
إذن كيف تستخدم نموذج المصنع البسيط؟ اسمحوا لي أن أعطيك مثالا. أعتقد أن هذا أسهل بكثير من الفهم من وصف النص النظري الطويل! هنا هو علاج Nouveau Riche: P
بعد استخدام نموذج المصنع البسيط ، يحتاج Nouveau Riche الآن إلى الجلوس في السيارة والقول للسائق: "القيادة". دعونا نرى كيف يتم تنفيذها:
// تجريدي دور المنتج العام للواجهة العامة {public void drive () ؛ }. }} الفئة العامة BMW تنفذ Car {public void drive () {system.out.println ("Driving BMW") ؛ }}. . . (لن أكتب Audi: P) // دور فئة المصنع سائق الطبقة العامة {// طريقة المصنع // لاحظ أن نوع الإرجاع هو دور المنتج التجريدي لدوار السيارة الثابت (السلسلة S) يلقي استثناء {// ugge logic ، إرجاع دور المنتج المحدد إلى العميل if (s.equalsignorecase ("benz")) آخر إذا (S.equalsInsIgnoreCase ("BMW")) إرجاع BMW () جديد ؛ ...... آخر رمي استثناء جديد () ؛ . . . // مرحبًا بك في Nouveau Riche لتظهر ... قطب الفئة العامة {public static void main (string [] args) {try {// أخبر السائق بأنني آخذ سيارة مرسيدس بنز سيارة = driver.drivercar ("benz") ؛ // إعطاء الأمر: drive () ؛ . .إذا وضعت جميع الفصول في ملف واحد ، فلا تنسى أن فئة واحدة فقط تم الإعلان عنها. العلاقة بين الفصول الدراسية في البرنامج هي كما يلي:
هذا هو نموذج المصنع البسيط. فيما يلي الفوائد:
بادئ ذي بدء ، بعد استخدام نموذج المصنع البسيط ، لا يكون برنامجنا "مريضًا" ويتماشى أكثر مع الواقع ؛ ويتم إعفاء العميل من مسؤولية إنشاء كائنات المنتج مباشرة ، ولكنه مسؤول فقط عن "استهلاك" المنتجات (كما يفعل Nouveau Riche).
دعنا نحلل نموذج المصنع البسيط من مبدأ الفتح والإغلاق. عندما يضيف Nouveau Riche سيارة ، طالما تلبي العقد الذي صاغه المنتج التجريدي ، يمكن أن يستخدمه العميل طالما تم إخطاره بالمصنع. لذلك بالنسبة لجزء المنتج ، فإنه يتوافق مع مبدأ الفتح والإغلاق - الفتح للتوسع والإغلاق للتعديل ؛ ولكن يبدو أن جزء المصنع ليس مثاليًا ، لأنه في كل مرة تتم فيها إضافة سيارة ، يجب إضافة منطق العمل المقابل ومنطق الحكم إلى فئة المصنع ، التي تنتهك بشكل طبيعي مبدأ الافتتاح والإغلاق.
لمثل هذه الفئة المصنع (في حالتنا للسائق) ، نسميها الطبقة سبحانه وتعالى أو فئة الله.
المثال الذي نقدمه هو أبسط حالة ، وفي التطبيقات العملية ، من المحتمل أن يكون المنتج عبارة عن بنية شجرة متعددة المستويات. نظرًا لوجود فئة مصنع واحدة فقط في نموذج المصنع البسيط لتتوافق مع هذه المنتجات ، فقد يدمر هذا فصل الله ، وبدوره يستنفد المبرمجين الجميلين لدينا :(
كما ذكرت سابقًا ، فإن نموذج المصنع البسيط مناسب للمواقف التي ستكون فيها الأعمال بسيطة. ولكن قد لا يكون قابلاً للتكيف مع بيئات الأعمال المعقدة. يجب أن يتم ذلك بواسطة نموذج طريقة المصنع! !
4. نموذج طريقة المصنع
دعونا نلقي نظرة على تكوينه أولاً:
1. دور المصنع التجريدي: هذا هو جوهر نمط طريقة المصنع ، لا علاقة له بالتطبيق. إنها واجهة يجب أن ينفذ دور مصنع معين أو فئة الوالدين التي يجب موروثة. في Java يتم تنفيذه بواسطة فصول أو واجهات مجردة.
2. دور المصنع المحدد: يحتوي على رمز يتعلق بمنطق الأعمال المحدد. استدعى التطبيق لإنشاء كائن المنتج المحدد المقابل. في جافا يتم تنفيذها بواسطة فصول ملموسة.
3. دور المنتج التجريدي: إنها فئة الوالدين الموروثة بمنتج معين أو واجهة تم تنفيذها. في جافا ، هناك فصول أو واجهات مجردة بشكل عام لتنفيذها.
4. دور المنتج المحدد: الكائن الذي تم إنشاؤه بواسطة دور مصنع معين هو مثال على هذا الدور. تنفذها فئات ملموسة في جافا.
استخدم مخططات الفصل لتمثيل العلاقة بينهما بوضوح:
دعنا نستخدم مثالًا كاملاً لمعرفة كيفية تنسيق الأدوار المختلفة في نموذج المصنع. الحديث عن أعمال Nouveau Riche ، كلما زاد عدد السيارات التي يحبونها. هذا جعل السائق يعاني. كان عليه أن يتذكر أي سيارة والحفاظ عليها ، وكان عليه استخدامها! لذا تعاطف Nouveau Riche معه وقال: يعتمد ذلك على سنواتك معي ، لن تضطر إلى العمل بجد في المستقبل. سأقوم بتعيين عدد قليل من الموظفين ، فقط أعتني بهم! لذلك ، ظهرت إدارة نموذج طريقة المصنع. الرمز كما يلي:
// أدوار المنتج التجريدية ، تشبه أدوار المنتج المحددة نموذج المصنع البسيط ، لكنها أصبحت أكثر تعقيدًا قليلاً ، وهنا تم حذفها قليلاً. // Abstract Factory دور السائق العام {Public Car DriverCar () ؛ } الفئة العامة Benzdriver تنفذ Driver {Public Car DriverCar () {return New Benz () ؛ }} الفئة العامة BMWDriver تنفذ Driver {Public Car DriverCar () {return New BMW () ؛ }} ...... // يجب أن تشكل علاقة مقابلة مع المنتج المحدد ، هنا .../ اسأل السيد Nouveaux الفئة العامة {public static void main (string [] args) {try {driver driver = new benzdriver () ؛ سيارة السيارة = driver.drivercar () ؛ car.drive () ؛ } catch (استثناء e) {}}}تستخدم طريقة المصنع دور المصنع التجريدي باعتباره الأساس بدلاً من استخدام فئات الخرسانة باعتبارها الأساسية في نمط المصنع البسيط. دعونا نلقي نظرة على ما جلبه لنا نموذج طريقة المصنع؟ استخدم مبدأ الفتح والإغلاق لتحليل نموذج طريقة المصنع. عندما يتم إنشاء منتج جديد (على سبيل المثال ، سيارة Nouveau Riche) ، طالما تم إنشاؤه وفقًا للعقد الذي قدمه دور المنتج التجريدي ودور المصنع المجردة ، يمكن أن يستخدمه العميل دون الحاجة إلى تعديل أي رمز موجود. يبدو أن نموذج طريقة المصنع يتماشى تمامًا مع مبدأ الفتح والإغلاق!
إن استخدام نموذج نهج المصنع يكفي للتعامل مع معظم احتياجات العمل التي قد نواجهها. ومع ذلك ، عندما يكون هناك العديد من أنواع المنتجات ، سيظهر عدد كبير من فئات المصانع المقابلة ، وهو ما لا ينبغي أن يكون ما نأمله. لذلك أقترح استخدام نمط مصنع بسيط في هذه الحالة إلى جانب نمط طريقة المصنع لتقليل فئة المصنع: أي استخدام نمط مصنع بسيط للأنواع المماثلة على شجرة المنتج (عادة ما تكون تلك الإخوة في أوراق الشجرة).
بطبيعة الحال ، يجب معالجة الظروف الخاصة بمعالجة خاصة: بالنسبة لأشجار المنتجات المختلفة في النظام ، وهناك أسر منتجات على أشجار المنتج ، ثم في هذه الحالة ، يمكن استخدام نموذج المصنع التجريدي.
5. ملخص
دعونا نلقي نظرة على الإلهام الذي قدمه نموذج المصنع البسيط ونموذج طريقة المصنع:
إذا لم نستخدم نمط المصنع لتنفيذ مثالنا ، فربما يكون الرمز أقل بكثير - فقط تنفيذ السيارة الحالية ، دون استخدام تعدد الأشكال. ولكن فيما يتعلق بالصيانة ، فإن قابلية التوسع سيئة للغاية (يمكنك أن تتخيل الفصل الذي تريد لمسه بعد إضافة سيارة). لذلك ، من أجل تحسين قابلية التوسع والصيانة ، يجدر كتابة المزيد من التعليمات البرمجية.
6. نمط المصنع التجريدي
دعونا أولاً نفهم ماهية عائلة المنتج: عائلة من المنتجات المكونة من وظائف موجودة في التسلسلات الهرمية للمنتج المختلفة. إذا تمكنت من فهم هذا المفهوم بوضوح من خلال قراءة هذه الجملة ، يجب أن أعجبك. دعونا نستخدم مثالًا لتوضيحه بوضوح.
BMWCAR و Benzcar في الشكل هما شجرتان منتجان (التسلسل الهرمي للمنتج) ؛ في حين أن BenzsportScar و BMWSportScar كما هو موضح في الشكل ، عائلة منتج واحد. يمكن وضعها جميعًا في عائلة السيارات الرياضية ، وبالتالي فإن الوظائف مرتبطة. وبالمثل ، فإن Bmwbussinesscar و BenzsportScar هي أيضًا عائلة المنتج نفسها.
بالعودة إلى موضوع نموذج المنتج التجريدي ، يمكن القول أن الفرق بينه وبين نموذج طريقة المصنع يكمن في تعقيد الحاجة إلى إنشاء كائنات. علاوة على ذلك ، فإن نموذج المصنع التجريدي هو الأكثر تجريدًا وعامة بين الثلاثة. الغرض من نمط المصنع التجريدي هو توفير واجهة للعميل لإنشاء كائنات منتج في عائلات المنتجات المتعددة. علاوة على ذلك ، يجب تلبية الشروط التالية عند استخدام نمط المصنع التجريدي:
1. هناك العديد من عائلات المنتجات في النظام ، ويمكن للنظام استهلاك أحد المنتجات فقط في وقت واحد.
2. استخدم المنتجات التي تنتمي إلى نفس عائلة المنتج.
دعونا نلقي نظرة على الأدوار المختلفة لنمط المصنع التجريدي (تمامًا مثل طريقة المصنع):
دور المصنع التجريدي: هذا هو جوهر نمط طريقة المصنع ، لا علاقة له بالتطبيق. إنها واجهة يجب أن ينفذ دور مصنع معين أو فئة الوالدين التي يجب موروثة. في Java يتم تنفيذها بواسطة فصول أو واجهات مجردة.
دور المصنع المحدد: يحتوي على رمز يتعلق بمنطق أعمال محدد. استدعى التطبيق لإنشاء كائن المنتج المحدد المقابل. في جافا يتم تنفيذها بواسطة فصول ملموسة.
دور المنتج التجريدي: إنها فئة الوالدين أو واجهة التنفيذ للميراث المحدد للمنتج. في جافا ، هناك فصول أو واجهات مجردة بشكل عام لتنفيذها.
دور المنتج المحدد: الكائن الذي تم إنشاؤه بواسطة دور مصنع معين هو مثيل لهذا الدور. تنفذها فئات ملموسة في جافا.
بعد قراءة الوضعين الأولين ، يجب أن يكون لدي فكرة واضحة عن التنسيق بين الشخصيات المختلفة في هذا الوضع ، لذلك لن أعطي أمثلة محددة. إنه يجب عليك الانتباه إلى تلبية الشروط لاستخدام نموذج المصنع التجريدي ، وإلا حتى لو كانت هناك العديد من أشجار المنتجات ، لا تزال هناك أسر منتجات ، لكن لا يمكن استخدامها.
المقالة أعلاه لديها فهم عميق لنماذج المصنع الثلاثة في جافا. هذا هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.