نمط طريقة المصنع: الفرق بين النسختين

[مراجعة غير مفحوصة][مراجعة غير مفحوصة]
تم حذف المحتوى تمت إضافة المحتوى
طلا ملخص تعديل
وسم: تعديل مصدر 2017
سطر 5:
يعد نمط تصميم طريقة المصنع <ref name="GoF">{{استشهاد بكتاب|مؤلف1=Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides|عنوان=Design Patterns: Elements of Reusable Object-Oriented Software|سنة=1994|ناشر=Addison Wesley|ISBN=0-201-63361-2|صفحات=[https://archive.org/details/designpatternsel00gamm/page/107 107ff]|مسار=https://archive.org/details/designpatternsel00gamm/page/107| مسار أرشيف = https://web.archive.org/web/20200518204757/https://archive.org/details/designpatternsel00gamm/page/107 | تاريخ أرشيف = 18 مايو 2020 }}</ref> أحد ''[[خطط التصميم (حاسوب)|أنماط التصميم "عصابة الأربعة"]]'' التي تصف كيفية حل مشكلات التصميم المتكررة لتصميم برامج مرنة و<nowiki/>[[برمجة كائنية التوجه|موجهة]] قابلة لإعادة الاستخدام، أي الكائنات التي يسهل تنفيذه أو تغييرها أو اختبارها، وإعادة استخدامها.
 
يتم استخدام نمط (تصميم) طريقة المصنع بدلاً من [[دالة البناء (برمجة كائنية التوجه)|مُنشئ]] [[صنف (حوسبة)|الصنف]] العادي للاحتفاظ بمبدأ [[SOLID (تصميم كائني المنحى)|SOLID]] للبرمجة، وفصل بناء الكائنات عن الكائنات نفسها. هذاهذه لهالفكرة المزايالها ومفيدمزايا ومفيدة للحالات التالية، من بين أمور أخرى: <ref>{{استشهاد ويب
| مسار = http://w3sdesign.com/?gr=c03&ugr=proble
| عنوان = The Factory Method design pattern - Problem, Solution, and Applicability
سطر 13:
 
* يسمح ببناء الاصناف بمكون من نوع لم يتم تحديده مسبقًا، ولكن يتم تعريفه فقط في "واجهة" أو التي يتم تعريفها على أنها نوع ديناميكي.
: وبالتالي، على سبيل المثال، يمكن إنشاء صنف <code>Vehicle</code> (مركبة) التي تحتوي على محرك عضو من واجهة محرك <code>IMotor</code>، ولكن لا يوجد نوع محدد من المحرك <code>Motor</code> معرف مسبقًا، عن طريق إخبار [[دالة البناء (برمجة كائنية التوجه)|مُنشئ]] السيارة <code>Vehicle constructor</code> باستخدام محرك كهربائي <code>ElectricMotor</code> أو محرك بنزين <code>GasolineMotor</code>. يستدعي كود [[طريقة (برمجة حاسوب)|مُنشئ]] المركبة <code>Vehicle constructor</code> بعد ذلك [[طريقة (برمجة حاسوب)|طريقة]] مصنع المحرك، لإنشاء المحرك المطلوب الذي يتوافق مع واجهة <code>IMotor</code>.
* يسمح ببناء الاصناف الفرعية إلى أحد الأصناف الأبوية الذي لم يتم تحديد نوع مكوناته مسبقًا، ولكن تم تعريفه فقط في واجهة، أو تم تعريفه على أنه نوع ديناميكي.
: على سبيل المثال، يمكن لمركبة من الصنف <code>Vehicle</code> التي لديها عضو محدد بنوع ديناميكي، أن تحتوي على اصناف فرعية من النوع <code>ElectricPlane</code> و <code>OldCar</code> تم تصميم كل منها بنوع مختلف من المحركات. يمكن تحقيق ذلك عن طريق بناء الاصناف الفرعية بطريقة مصنع المركبات، مع توفير نوع المحرك. في مثل هذه الحالات قد يكون المنشئ مخفيًا.
* يسمح لكود أكثر قابلية للقراءة في الحالات التي توجد فيها منشآت[[دالة constructorsالبناء (برمجة كائنية التوجه)|منشآت]] متعددة، كل منها لسبب مختلف.
 
: على سبيل المثال إذا كان هناك نوعان من constructors[[دالة البناء (برمجة كائنية التوجه)|المنشئات]] {{كود|Vehicle(make:string, motor:number)}} و {{كود|Vehicle(make:string, owner:string, license:number, purchased:date)}} فإن بناءconstruction[[دالة أكثرالبناء قابلية(برمجة كائنية التوجه)|المنشئ]] للقراءةذو منالمقروئية الاصنافالأفضل classesللاصناف يكون لاستخدامباستخدام {{كود|Vehicle.CreateOwnership(make:string, owner:string, license:number purchased: date)}} vsمقابلمقابل {{كود|Vehicle.Create(make:string, motor:number)}}
 
يسمح للصنفclassللصنف بتأجيل التمثيل instantiation(انشاء كائن) إلى الاصناف الفرعية subclasses،الفرعية، ومنع التمثيلinstantiationالتمثيل المباشر لكائن من نوع الصنف الأصلparent classالأصل type(الأب).
 
*
 
: على سبيل المثال، يمكن منع المركبة Vehicle من أن يتم تمثيلها instantiate مباشرة لأنها لا تحتوي على مُنشئconstructor ،مُنشئ، ويمكن إنشاء الاصناف الفرعية subclasses فقط مثل ElectricPlane أو OldCar عن طريق استدعاء طريقة مصنع السيارة (الثابتة)Vehicle (static) factory method في مُنشئconstructorمُنشئ الصنفالأصناف الفرعيةsubclassالفرعية أو المُهيئinitializerالمُهيئ (initializer).
 
إنشاء كائن مباشرة داخل الصنف الذي يتطلب أو يستخدم الكائن غير مرنالمرن لأنه يلزم الصنف بكائن معين ويجعل من المستحيل تغيير التمثيلinstantiationالتمثيل بشكل مستقل عن الصنف. يتطلب الممثل (instantiator) في تغييرًا في كود الصنف class code الذي نفضل عدم لمسه. ويشار إلى هذا باسم ''اقتران الكود'' (''code coupling'') ويساعد نمط طريقة المصنع في ''فصل'' الكود (''decoupling'' ).
 
يتم استخدام نمط تصميم طريقة المصنع من خلال تحديد عملية منفصلة أولاً، ''طريقة المصنعfactoryالمصنع (factory method,)'' ، لإنشاء كائن، ثم استخدام ''طريقة المصنع'' هذه عن طريق استدعاءها لإنشاء الكائنobjectالكائن. يتيح ذلك كتابة الاصناف الفرعية subclasses التي تحدد كيفية إنشاء كائن أصلparent objectأصل ونوع الكائنات التي يحتوي عليها الأصل. انظر الرسم التخطيطي لصنف [[لغة النمذجة الموحدة|UML]] أدناه.
 
== تعريف ==