Factory Design Pattern





انهارده حنبدء ف اول ديزاين باترن و هو ال Factory
و زى ما قولنا هنمسك ف كل ديزاين باترن انا حستخدمه ليه حينفعنى فى ايه و ازاى
طيب هو مبدئياً كدا الاول عايز اوضح حاجة بس
فى حاجة اسمها simple factory method
و ال factory design pattern
و طبعا فى اختلاف و اكتر ال Developers بيقعوا ف الحتة دى و فكرين ان ال simple factory هو دا الديزاين باترن لكن ﻻ
دا يعتبر Programing idiom
ونا كنت واحد من الناس دى لحد ما قريت و فهمت الفرق و ححاول اوضحه دلوقتى
طيب ايه بقى هو ال factory دا يا عم مروان
هو يا سيدى المفروض انه Interface بس مش بتاع ال oop ﻻ هو زى عقد كدا كلاس بيكون اب لكلاسات
حوضح النقطة دى قدام
المهم هو انك تعرف Interface تقدر عن طريقة تـ create objects بس تخلى ال SubClasses هى اللى تحدد انهى كلاس هيتعمل منه instantiations
هو اكيد مش واضح طبعا طيب تعالى كدا نكمل الاول بس و هفهمك تانى
فوايده انه بيكريت ال object من ال factory و دا بيكون اسهل من انك كل شوية تعمل new object فى اماكن كتير
نفترض عايز تغير اسم الكلاس ؟ هتروح تغيره ف كل الاماكن اللى عامل منها new object ؟
انما كدا هتغيره ف ال factory class بس
طيب نشرح الاول ال Simple factory method عشان نحاول نبسط الموضوع شوية
بص يا سيدى هو عبارة عن كلاس بيكريت objects من كلاس تانى بطريقة داينامك بس كدا 
طب ازاى بقى ... بص فى الصورة مثلا
هتلاقى كلاس MobileFactory
كل اللى بيعمله انه بيكريت object من ال Mobile class
و بيدله النوع اللى انت عايزه
فا ال Mobile Class بيتكريت بالنوع اللى انت عايزه و تعمل بقى اللى انت عايزه
بس كدا بسيطة جرب الكود بقى بنفسك
مثال تانى بص ع الصورة التانية كدا
هتلاقى كلاس German Factory
عنده نوع رخيص و نوع غالى
و method بتعمل ال create بتاخد النوع و تنادى ع protected method بتشوف لو رخيص هتعمل object عجلة و لو النوع غالى هتعمل object عربية و لو مش موجود هتطلع Error
بس كدا انت بتنادى ع ال Factory كلاس و تقوله Create و تديله النوع بقى بس خلاص
هتقدر بقى تضيف اى نوع ف اى وقت بسهولة
دا كدا ببساطة ال simple factory اعتقد سهل صح ؟
الكود هنا
https://github.com/MarwanMoham…/designPatterns/…/factory.php
ندخل فى ال factory design pattern بقى هو نفس الفكرة عمتا بس ع اكبر شوية
بص يا سيدى هنفترض عندنا مطعم بيعمل بيزا و المطعم دا عنده فرع ف كل محافظة
و كل فرع بيعمل انواع بيتزا كتييير جدا
و انت عايز تطلب من فرع معين نوع بيتزا معين !!
هتعملها ازاى بقى ؟ خد بقى الصورة دى و هو دا ال Factory
هتعمل كلاس PizzaStore دا هيبقى ال interface بتاعك
و مثلا فيه abstract method اسمها CreatePizza
و هتعمل لكل فرع كلاس بقى و تخليه يورث ال PizzaStore
extends يعنى
و طبعا كل فرع بقى حيكون بياخد النوع اللى انت عايز تطبه و ينادى ع كلاس ال فيه نوع ال Pizza دا مثلا
فا كدا انت عندك كلاس اساسى تحته كلاسات كتير اللى هما الفروع و تحت كل فرع فيه كلاسات كتير اللى هى انواع البيتزا
طب احنا عندنا انواع بيتزا كتير و مش هينفع اكرر الكود ف كل نوع فا هعمل كلاس abstract للبيتزا و كل الانواع هتعمل منه extends
لان انا عندى طريقة عمل البيتزا واحده اللى بيتغير الاسم بس
فنا كدا كل اللى هعمله هو انى هنادى ع الفرع و اقوله اعملى بيتزا نوعها كذا
بس كدا
هتلاقى الكود فى تالت صورة و الكود ع ال github
https://github.com/…/designPatte…/blob/master/PizzaStore.php
بس كدا يارب يكون الموضوع بسيط و عرفت اوضحه بى ابسط الطرق
اكيد انا متعمقتش كتير بس انت كدا المفروض تكون فهمت يعنى ايه Factory و تستخدمه امتى و ازاى و ليه
لو فى حاجة مش مفهومة اسالنى اى وقت
و شير بقى لو استفدت و فيد غيرك
و استنوا يوم الجمعه الجاية و نوع جديد بقى
__________________________________
المصدر
http://www.phptherightway.com/pages/Design-Patterns.html
http://designpatternsphp.readthedocs.io/…/Facto…/README.html
وكتاب Head First Design Patters
__________________________________

تعليقات

المشاركات الشائعة من هذه المدونة

Singleton Desgin pattern

Chain of Responsibility Design pattern