الفرق بين المراجعتين لصفحة: «Design Patterns/factory method»

من موسوعة حسوب
إدخال 1.0: عنوان الصفحة
 
إدخال 2.0: محتوى
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:أسلوب المصنع}}</noinclude>
<noinclude>{{DISPLAYTITLE:أسلوب المصنع}}</noinclude>
'''أسلوب المصنع''' هو نمط تصميم إنشائي (creational) يوفر واجهة لإنشاء الكائنات (objects) داخل فئات رئيسية (superclasses) لكنها تسمح في نفس الوقت للفئات الثانوية (subclasses) بتغيير نوع تلك الكائنات التي سيتم إنشاؤها.
== المشكلة ==
تخيل أنك تنشئ تطبيقًا لشحن البضائع، وأول نسخة من ذلك التطبيق لا تتعامل إلا مع الشحن البري بالشاحنات (Trucks) لذا من المنطقي أن يكون أغلب شيفرتك البرمجية تحت فئة <code>Trucks</code>. لنفرض هنا أن التطبيق اشتهر بعد مدة وزادت أعداد الطلبات جدًا إلى درجة أنك بدأت تتلقى طلبات شحن بحري، فإنك ستحتاج إلى إضافة فئة جديدة ليكن اسمها<code>Ships</code>.
لكن هذا سيتطلب تغييرات في كل الشيفرة البرمجية لديك، وإن قررت بعد فترة أخرى إضافة نوع آخر من الشحن -الجوي مثلًا- إلى التطبيق فستحتاج إلى خوض هذه العملية كلها مرة ثالثة، وستكون النتيجة شيفرة مزدحمة فوضوية تملؤها العبارات الشرطية التي تعتمد على فئات كائنات الشحن.
== الحل ==
يقترح أسلوب المصنع هنا أن تستبدل استدعاء لأسلوب "factory" الخاص بالإنشاء المباشر للكائنات -من خلال مُعامِل <code>new</code>-

مراجعة 13:21، 1 ديسمبر 2018

أسلوب المصنع هو نمط تصميم إنشائي (creational) يوفر واجهة لإنشاء الكائنات (objects) داخل فئات رئيسية (superclasses) لكنها تسمح في نفس الوقت للفئات الثانوية (subclasses) بتغيير نوع تلك الكائنات التي سيتم إنشاؤها.

المشكلة

تخيل أنك تنشئ تطبيقًا لشحن البضائع، وأول نسخة من ذلك التطبيق لا تتعامل إلا مع الشحن البري بالشاحنات (Trucks) لذا من المنطقي أن يكون أغلب شيفرتك البرمجية تحت فئة Trucks. لنفرض هنا أن التطبيق اشتهر بعد مدة وزادت أعداد الطلبات جدًا إلى درجة أنك بدأت تتلقى طلبات شحن بحري، فإنك ستحتاج إلى إضافة فئة جديدة ليكن اسمهاShips.

لكن هذا سيتطلب تغييرات في كل الشيفرة البرمجية لديك، وإن قررت بعد فترة أخرى إضافة نوع آخر من الشحن -الجوي مثلًا- إلى التطبيق فستحتاج إلى خوض هذه العملية كلها مرة ثالثة، وستكون النتيجة شيفرة مزدحمة فوضوية تملؤها العبارات الشرطية التي تعتمد على فئات كائنات الشحن.

الحل

يقترح أسلوب المصنع هنا أن تستبدل استدعاء لأسلوب "factory" الخاص بالإنشاء المباشر للكائنات -من خلال مُعامِل new-