the factory method pattern

12
THE FACTORY METHOD PATTERN Teaching document Borhan Otour (هان عطوربر) TISHREEN UNIVERSITY | [email protected]

Upload: borhan-otour

Post on 17-Feb-2015

24 views

Category:

Documents


0 download

DESCRIPTION

This teaching document gives an overview of what factory method design pattern in.written in Arabic .......Author: Borhan Otour

TRANSCRIPT

Page 1: The Factory Method Pattern

THE FACTORY METHOD

PATTERN Teaching document

Borhan Otour (برهان عطور)

TISHREEN UNIVERSITY | [email protected]

Page 2: The Factory Method Pattern

تتضمن الوثيقة الدراسية المحتويات التالية:

مقدمة. .1

مبادئ التصميم غرضي التوجه )مراجعة سريعة(. .2

(.Simple factoryبدأ ال المصنع البسيط )م .3

(.The factory methodنموذج تصميم ال ) .4

مقدمة

يندرج (Factory method، فإن نموذج ال )تؤديهااألساسية التي الوظائفإذا ما أردنا تصنيف نماذج التصميم بحسب

(. ويقصاد بنماذج التصميم اإلنشائية تك النماذج التي تتصص creational patternsفي إطار ما يدعى بالنماذج اإلنشاائية )

بطريقة يحقق فيها الكود المبادئ األساسية في التصميم غرضي التوجه. وبالتالي يحافظ (Object creationبإنشاء األغراض )

درجة عالية(.مراحل الحقة )قابل لكصيانة ب والتوسع فيالتصميم عكى قدرته عكى التعديل

عكى األمثكة بشكل كبير جدا لتوضيح األفكار ضمن الوثيقة. االعتمادسيتم مالحظة:

سريعة(مبادئ التصميم غرضي التوجه )مراجعة

طرق بشكل سريع ت، سوف ن(The Factory method design pattern)المصنع قبل البدء بشرح نموذج تصميم طريقة

إلى أهم المبادئ في التصااااميم غرضااااي التوجه والتي يحب أن تتحقق في أغكب نماذج التصااااميم المعروفة بما في ذل

نموذجنا.

إنه وبعد ف (أو أي بيئة أخرىبيئة غرضااية التوجه ) برمحي فيتطوير أي منتج يحب أن نضااع بعين االعتبار أنه و عند

افة خواص , أو إض"واجهة , متطكب وظيفيتعديل ميزة معينة فيه "ر )سيأتي الوقت ليتطو الزمن،لفترة معينة من استصدامه

ة هميوهنا تأتي أ .واكمال التطوير. وفي ككتا الحالتين سااايكون من الواجب عكينا فتح الكود لكتعديل (عكيه features جديدة

وبالتالي ،عوالتوس اتباع محموعة من القواعد في التطوير غرضاي التوجه تضامن لنا تصاميم لكبرنامج يعطيه المرونة لكتعديل

OO "مبادئ التصاميم غرضي التوجههذه القواعد ب " . تعرفوالموثوقيةفي معامل الحودة والزمن وارتفاعفي التككفة توفير

Design principles.

التغيير هو الثابت الوحيد في البرمحة غرضاااية الذي ين عكى أن .(Principles #0أهم هذه المبادئ المبدأ صااافر )

ا طبعا يكص ما جاء في الفقرة وهذ .”Change is the only constant that exists in OO software development“التوجه

.ا المبدأ تشتق كل المبادئ األخرىوعن هذ ابقة.الس

Page 3: The Factory Method Pattern

:((1الشكل)) تمثل جزءا من مصطط الصفوف لنظام بنكي التي الصفوفلدينا الحالة التالية من لنفرض أن

(1الشكل )

معين.ل وذل لعمي (قد تكون حساابات جارية أو حساابات توفير) الحساابات البنكيةمن ولنفرض أن لدينا مصافوفتان

بحكقة تكرارية السير عكى كل طع نست بسايط،بشاكل حسااب.اد االساتفادة من خدمة إظهار كشاف العميل أر ولنفرض أن

.(2الشكل ) وذل من أجل كل حسابلمعرفة الرصيد استدعاء التابع المناسب ومن ثم الحسابات،

. حيث هنا نتعامل مع ("Design for implementationتحقيق "من أجل ال التصميم) التحقيق،تدعى هذه الطريقة في

(ف األبالصااإذ نأخذ مقابض من الصاافوف المحققة لكواجهة ) بها، الصاافوف الحقيقة التي تحتوي عكى التحقيق المتصصاا

التوابع.التوابع الصاصة بهذه ونتعامل معالحساب

نضاااطر إلى إضاااافة نوع ثالث من قد مثال،في التصاااميم جوانب ساااكبية عديدة في محال الصااايانة. لهذه الطريقة

في عدة أماكن. فإذا كانت خدمة كشف الحساب متضمنةالحالة يحب إعادة فتح الكود لكتعديل هذهوفي البنكية،الحسابات

ونساايان القيام بالتعديل في أحد األماكن أو إجراء خطأ عند .مرات لكتعديل 5وجب فتح الكود مصتكفة،في خمسااة صاافوف

عنها.والتي نحن بغنى (،”Inconsistencyعدم االستقرار "القيام بالتعديل قد يؤدي الى أخطاء )

(.(3الشكل )) التالي،يسمح بإعادة كتابة كود كشف الحساب عكى النحو (1)الشكل التصميم السابق

إلى تحقيق مبدأ التصميم من (3يسعى الكود في الشكل )

نالحظ أنه بغض النظر .(Design for interfaceأجل الواجهة )

كل ومن أجلعن نوع الحساب المصزن في المصفوفة. فإنه

المشترك () calculateFundsحساب سيتم استصدام التابع

ة من مصتكف والمحقق بطريقة الحسااابات،بين كل كتصااريح

وبحسااااب خاصااااية تعددية األ ااااكال حساااااب.أجل كل

"polymorphism" نناسب ملتابع المسوف يتم استدعاء ا

أجل كل غرض. اآلن عند إضاافة أي صف حساب جديد إلى

لن سااوف (Accountالتصااميم بحيث يوسااع الصااف األب )

نضااطر الى فتح الكود الصاص بإظهار كشااف الحساااب أبدا.

Design to interface, not to" مبدأ:وهكذا نكون قد حققنا

an implementation"

Page 4: The Factory Method Pattern

(2الشكل )

(3الشكل )

Page 5: The Factory Method Pattern

(THE SIMPLE FACTORY PROGRAMMING IDIOMمبدأ المصنع البسيط )

اساااامه الواجهات بإدارةنامج صااااف متصصاااا هذا البرتصااااميم وأحد اقسااااام معين،لنفرض أن لدينا برنامج حاسااااوبي

ApplicationUI ((4الشكل)) يحقق الطريقة .buildPanel() كائن يمثل واجهة متصصصة , التي تقوم بإنشاء(popup menu –

Dropdown menu - window) من النوعPane ( 5الشكل). بناء الواجهة الرسومية الصاصة بالتطبيق.الستصدامها في

(4الشكل )

(5الشكل )

Page 6: The Factory Method Pattern

حيث صرحنا عن طكب إنشاء Design for interface, not to an implementationنه كسرنا مبدأ الأ , هناما يحدر بنا مالحظته

Select the components that" هو:لتصحيح الوضع و اعتمادا عكى مبدأ هام في التصميم غرضي التوجه . (Concreteصفوف )

varies , and separate them from what stays the same" الذي يتضمن عزل المكونات التي تتغير باستمرار و تغكيفها في ,

Panelلكواجهة إن المكونات التي قد تتغير في حالتنا هنا هي الصفوف المحققة .االساتصدام إلعادةمكون خاص بها قابل

ميةرسو أو حذف واجهة (،Menu Panelعكى سبيل المثال ) الرسوميةصفوف الواجهات حيث يمكن أن نضيف نوع جديد من

.(Dropdown Panelموجودة مثل ال )

(6الشكل )

(7الشكل )

Page 7: The Factory Method Pattern

.(SimplePanelFactoryالصف ) وسنسمي هذايمكن تغكيف عمكية إنشاء الواجهات الرسومية في صف متصص

إلنشاء الواجهات الرسومية التي هذا الصف ApplicationUI ال ويستصدم .() createPanelبحيث لديه طريقة وحيدة اسمها

.(8الشكل ) يريدها

(8الشكل )

(9الشكل )

.((11)الشكل عكى الشكل التالي ) ApplicationUIويكون تحقيق الصف

Page 8: The Factory Method Pattern

(11الشكل )

ان فإن التعديل سيتم في مك التطبيق،أنواع جديدة من الواجهات الرسومية إلى إضافة وأنه عندلمالحظ اآلن من ا

:وبالتالي .SimplePanelFactoryواحد فقط هو في ال

الكود في تابع ال بقيbuildPanel () و خصصنا الصف يل،تعدمغكقا ألي عمكيةSimplePanelFactory لكقيام

قككنا من احتمالية حصول األخطاء التي قد تنتج عن التعديل , و بعمكية إنشاء الواجهات الرسومية و بالتالي

محال الصطأ في مكان و احد فقط ناحصر

يستطيع أي صف آخر غير الصفApplicationUI طريقة الصف االستفادة منSimplePanelFactoryمثل ،

.ApplicationDialogاو الصف ،ApplicationStatusBar الصف

ويسمى . (Simple Factory Programming idiom)البسيط تدعى بطريقة المصنع (8هحية التصميم في الشكل )نم

والتي تدعى Panelال يتدخل أبدا بالصفوف من النوع والصف العميل (،The client)بالصف العميل ApplicationUI الصف

.(The productsالمنتحات )

وارد في فهم نموذج التصميم ال وستساعدنا عكى كبير،ولكنها مطبقة بشكل تصميم،هذه المنهحية ليست نموذج

الفقرة التالية بشكل كبير.

نالحظ هناا أنناا حافظنا عكى

Design toمبدأ التصااااميم:"

interface, not to

implementation"

Page 9: The Factory Method Pattern

(THE FACTORY METHOD DESIGN PATTERNنموذج تصميم طريقة المصنع )

ع. بحيث يستطيع النظام توليد الواجهات بناء عكى أردنا توسيع المشرو وعكى فرضبالعودة الى مثالنا السابق

السياق الموضوع فيه.

فان طبيعة واجهاته ،(web application)عبارة عن تطبيق ويب (Application) ا كان التطبيقإذ المثال،عكى سبيل

القائمة المنسدلة إن ،آخر (. بمعنىstandalone application) المكتبية التطبيقاتتصتكف بشكل كبير عن طبيعة واجهات

بحسب buildPanelلتطبيقات الوب تصتكف عن القائمة المنسدلة لكتطبيقات المكتبية. وبالتالي سوف يتصص تابع ال

.والمتناسبة مع نوع التطبيق الذي يعمل ،Panelليولد الصفوف المالئمة من النوع تطبيقسياق ال

التصصي ؟كيف سنقوم بهذا

يرد .() createPanelتابع مجرد اسمه ApplicationUIالذي سنفعله هو اننا سنضيف إلى الصف

.(11)الشكل كما في ،Panelكائن من النوع

المناساابة الرسااومية هو تابع محرد وظيفته األساااسااية هي توليد أنواع الواجهات () createPanelإن التابع

حققة لكصف الصفوف الم باختيارنا أحد. وساياق التطبيق هذا يحدد (يب أو تطبيق مكتبيتطبيق وساياق التطبيق )ل

ApplicationUI، هي التي ستحقق التابع وهذه الصفوفcreatePanel (). وسيتم تصصي مهمة التابعcreatePanel()

12 ) الشكل المالئمة لسياق التطبيق الذي نحن فيه Panelالكائنات من النوع ليولدكل صاف من هذه الصفوف في

-13 – 14 ).

(11)الشكل

Page 10: The Factory Method Pattern

(12الشكل )

(13الشكل )

Page 11: The Factory Method Pattern

(14الشكل )

في الصفوف (تطبيق ويب , أو تطبيق مكتبي) لكسياق المناسبة اآلن نستطيع توليد مكونات الواجهة الرسومية

الذي يتصص الصف األب و ،الرسومينظام العرض مكونات الستصدامها في بناء ApplicationUIاألبناء لصف إدارة الواجهات

ApplicationUI عن طريق التابع ببنائهبالقيام() buildPanel ( 12الشكل).

التصميم الذي تستصدم فيه هذه الطريقة بال ويسمى نموذجبطريقة المصنع () createPanel يقة:الطرتسمى

(Factory method design pattern). ب،األف اض في الصإلنشاء األغرتجريد من التعريف طبقة عكى: والذي يركز

لتابع توليد و."ناؤهايجب ب المنتجاتبحيث تقرر الصفوف األبناء أي في الصفوف األبناء "طريقة اإلنشاء وتحقيق

المنتحات الشكل التالي:

( )

Page 12: The Factory Method Pattern

ة المصنعقالصفوف لنموذج طريمصطط –( 15الشكل )