وضع الإستراتيجية لبرمجة وضع دلفي
ليو يي
1.1 شرح الوضع
الغرض من نمط الإستراتيجية هو تحديد مجموعة من الخوارزميات وتغليف كل خوارزمية في فئة مستقلة ذات واجهة مشتركة بحيث يمكن استبدالها ببعضها البعض. يسمح نمط الإستراتيجية بتغييرات الخوارزمية بشكل مستقل عن العميل الذي يستخدمه. لفهم دوافع وأهمية استخدام نمط الإستراتيجية، علينا أن نبدأ بمثال مثير للاهتمام. في نظام إدارة المواد، تعد الوحدات الصادرة والواردة هي الأجزاء الأساسية للنظام (سنأخذ الوحدات الصادرة كمثال للتحليل أدناه). بالنسبة للمبرمجين الذين ليس لديهم خبرة في البرمجة الموجهة للكائنات، فغالبًا ما يضعون كل منطق الطلب الصادر على العميل (واجهة أمر المخرج)، ويستخدمون عبارات الفرع الشرطية على العميل لتحديد ما إذا كان نوع الطلب الصادر يتم اختياره أم لا. استعارة المواد أو الإبلاغ عن الخسائر، من أجل اختيار طرق مختلفة للتسوية الخارجية، كما هو موضح في الشكل 1-1. ونتيجة لذلك، يصبح رمز العميل معقدًا ويصعب صيانته. على سبيل المثال: عندما تحتاج إلى إضافة نوع أمر تحويل جديد خارج المستودع، فإنك تحتاج إلى تعديل شروط الحكم وإعادة ترجمة العميل ونشره. مع تزايد تعقيد الوضع، سيكون هناك المزيد والمزيد من الفروع الشرطية، وستتم إضافة المزيد والمزيد من رموز البرامج، وهذا سيجعل العميل أكبر وأكثر صعوبة في الصيانة، وستزداد احتمالية التأثير والأخطاء المتبادلة . الشكل 1-1 تم تصميم الوحدة الصادرة بناءً على التفكير الموجه نحو العمليات، إذا تم تحليلها باستخدام التفكير الموجه للكائنات، فيمكن اعتبار قائمة الانتقاء وقائمة الاقتراض وتقرير الخسارة بمثابة فئات مشتقة من المذكرة الصادرة، كما هو موضح في الشكل 1-. 2 عرض. بهذه الطريقة، يعمل المستند الصادر كفئة أساسية للمستندات لتوفير واجهة مشتركة للمستندات، ويتم استخدام الوراثة لتنفيذ سلوكيات صادرة مختلفة في الفئات الفرعية. وهذا في الواقع يستفيد من مفهوم مهم في التوجه الشيئي: تعدد الأشكال. ولكن لا يزال هناك عيب في هذا التصميم، وهو أن البيئة والسلوك مرتبطان ببعضهما البعض بشكل وثيق. بمعنى آخر، الوثيقة والخوارزمية الصادرة المحددة مقترنتان بشكل وثيق. يمنع الاقتران القوي الاثنين من التطور بشكل مستقل، مما يحد من إمكانية إعادة الاستخدام وقابلية التوسع. الشكل 1-3 هو الوحدة الصادرة المعاد تصميمها باستخدام نمط الإستراتيجية. يشير كائن المستند الصادر إلى كائن السياسة الصادر من خلال كائن العملية الصادرة (أي السياق في وضع الإستراتيجية). يتم تنفيذ العديد من الاستراتيجيات الصادرة المحددة من خلال فئات مشتقة من فئة الإستراتيجية الصادرة. يمكن للوثيقة الصادرة أن توفر طريقة التسوية الصادرة وواجهة عرض الوثيقة عن طريق التشغيل الصادر ونمط الوثيقة على التوالي. بهذه الطريقة، يفصل وضع الإستراتيجية السلوك الصادر عن بيئة المستند الصادر، ولن تؤثر زيادة أو تقليل أو تعديل الخوارزمية الصادرة على البيئة والعميل. الشكل 1-2 الوحدة الخارجية المصممة بناءً على التفكير الموجه للكائنات الشكل 1-3 الوحدة الخارجية المصممة بناءً على التفكير في نمط التصميم ميزة نمط الإستراتيجية هي الفصل بين الخوارزمية والبيئة، ويمكن أن يتطور الاثنان بشكل مستقل. لتوضيح فوائد فصل الخوارزميات والبيئات بشكل أفضل، يمكننا أيضًا أن ننظر إلى التصميم في الشكل 1-4. في هذا التصميم، لا يوجد مفهوم للوحدات الصادرة والواردة، لأنني أقوم بتجريد جميع المستندات الصادرة/الواردة ودمج واجهة المستندات وسلوكها ديناميكيًا أثناء وقت التشغيل. من خلال فئة العمليات الصادرة/الواردة، يمكن صيانة فئات السلوك المختلفة والاستعلام عنها وتكوينها. يقوم السلوك المستخرج/الوارد بتغليف الخوارزمية المقابلة له في شكل فئة إستراتيجية من أجل إكمال عمليات أنواع مختلفة من المستندات الواردة والصادرة. من الواضح أن هذا يعمل على تحسين إمكانية إعادة استخدام النظام وقابلية تطويره ويقلل من صعوبة الصيانة. الشكل 1-4 ميزة نمط الإستراتيجية هو الفصل بين الخوارزمية والبيئة ويمكن أن يتطور كل منهما بشكل مستقل ويمكن ملاحظة أن نمط الإستراتيجية مناسب للمواقف التالية: · عندما يكمن الاختلاف بين العديد من الفئات المرتبطة فقط في سلوكهم يسمح نمط الإستراتيجية للكائن باختيار سلوك واحد ديناميكيًا من بين العديد من السلوكيات. · عندما تكون هناك خوارزميات بديلة متعددة لتحقيق هدف ما، مثل تلك التي تحددها بناءً على مقايضات مختلفة (أي تطبيق استراتيجيات مختلفة). يمكن تغليف هذه الخوارزميات المحددة في فئات مشتقة من فئة الخوارزمية المجردة والاستمتاع بالواجهة الموحدة لفئة الخوارزمية المجردة. من خلال تعدد الأشكال، يمكن للعميل اختيار أي خوارزمية محددة طالما أنها تحتوي على كائن من فئة خوارزمية مجردة. · عندما تستخدم الخوارزمية بيانات غير متوفرة للعميل. يؤدي استخدام نمط الإستراتيجية إلى تجنب الكشف عن هياكل البيانات المعقدة المتعلقة بالخوارزمية. في الواقع، لا يحتاج العميل إلى معرفة المعرفة والبيانات المتعلقة بالخوارزمية. · عندما يشتمل تعريف الفئة على العديد من السلوكيات ويتم استخدام عبارات شرطية متعددة لتحديد اختيار هذه السلوكيات. يمكن لنمط الإستراتيجية نقل هذه السلوكيات إلى فئات الإستراتيجية المحددة المقابلة، وبالتالي تجنب التحديدات الشرطية المتعددة التي يصعب الحفاظ عليها، وتجسيد أفكار البرمجة الموجهة للكائنات.
1.2 الهيكل والاستخدام
يظهر هيكل نمط الإستراتيجية في الشكل 1-5، والذي يتضمن المشاركين التاليين: · الإستراتيجية المجردة (TSrategy) – تعلن عن واجهة مشتركة لجميع الخوارزميات المدعومة. يستخدم TContext هذه الواجهة لاستدعاء الخوارزميات المحددة والمغلفة بواسطة TConcreteStrategy. · الإستراتيجية الملموسة (TConcreteStrategy) - تتضمن خوارزميات أو سلوكيات محددة. تنفيذ واجهة TStrategy. · السياق (TContext) - يحمل إشارة إلى TStrategy. اتصل بواجهة TStrategy لتكوين خوارزميات أو سلوكيات محددة ديناميكيًا. الشكل 1-5 هيكل نمط الإستراتيجية في نمط الإستراتيجية، يتم تنفيذ الخوارزمية المحددة من خلال تفاعل TStrategy وTContext. عندما يتم استدعاء الخوارزمية، يمكن لـ TContext تمرير جميع البيانات التي تتطلبها الخوارزمية إلى TStrategy. وبدلاً من ذلك، يمكن لـ TContext تمرير نفسه كمعلمة لعملية TStrategy. عندما يقوم TContext بإعادة توجيه طلب العميل إلى TContext الخاص به، يقوم العميل عادةً بإنشاء كائن TConcreteStrategy وتمريره إلى TContext بهذه الطريقة، ويتفاعل العميل مع TContext فقط. عادةً ما تكون هناك سلسلة من فئات TConcreteStrategy التي يمكن للعملاء الاختيار من بينها. -------------------------------------------------- ----------------------------------------
يمكن تنزيل المزيد من المقالات ذات الصلة ونماذج رموز مصدر البرنامج من موقع المؤلف: http://www.liu-yi.net