التعريف: تحديد مجموعة من الخوارزميات ، وتغليف كل خوارزمية ، وجعلها قابلة للتبديل.
النوع: نمط سلوكي
مخطط الفصل:
نمط السياسة هو تغليف الخوارزميات ، ويغلف سلسلة من الخوارزميات في الفئات المقابلة ، وتنفيذ هذه الفئات الواجهة نفسها ويمكن استبدالها ببعضها البعض. في وضع الفئة السلوكية المذكورة أعلاه ، هناك نمط يركز أيضًا على تغليف الخوارزمية - وضع طريقة القالب. بالمقارنة مع مخطط الفصل ، يمكنك أن ترى أن الفرق بين وضع السياسة ووضع طريقة القالب هو فقط وجود سياق فئة تغليف منفصل. الفرق بينه وبين وضع طريقة القالب هو: في وضع طريقة القالب ، يتم تغليف الجسم الرئيسي لخوارزمية الاتصال في فئة الوالدين المجردة ، بينما في وضع الإستراتيجية ، يتم تغليف الجسم الرئيسي لخوارزمية الاتصال في سياق فئة التغليف. استراتيجية الإستراتيجية التجريدية هي عمومًا واجهة ، والغرض هو فقط تحديد المواصفات ، ولا يحتوي بشكل عام على المنطق. في الواقع ، هذا مجرد تطبيق عام. في البرمجة الفعلية ، نظرًا لوجود بعض المنطق نفسه بين كل فئة تنفيذ استراتيجية محددة ، من أجل تجنب الكود المكررة ، نستخدم غالبًا فئات مجردة للعب دور الاستراتيجية وتغليف التعليمات البرمجية العامة. لذلك ، في العديد من سيناريوهات التطبيق ، يظهر ظل نمط طريقة القالب عمومًا في وضع الاستراتيجية.
هيكل أنماط السياسة
فئة التغليف: تُعرف أيضًا باسم السياق ، التغليف الثانوي للسياسات هو تجنب المكالمات المباشرة للسياسات من خلال الوحدات النمطية عالية المستوى.
الاستراتيجية التجريدية: عادة واجهة. عندما يكون هناك منطق مكرر في كل فئة تنفيذ ، يتم استخدام فئات مجردة لتغليف هذا الجزء من الكود الشائع. في هذا الوقت ، يبدو نمط السياسة أشبه بنمط طريقة القالب.
استراتيجية محددة: عادة ما يتم تنفيذ أدوار استراتيجية محددة بواسطة مجموعة من الفئات المغطاة بالخوارزميات ، ويمكن استبدال هذه الفئات بحرية حسب الحاجة.
أمثلة على سيناريوهات التطبيق:
سيتزوج ليو باي من زوجته في جيانغدونغ. قبل مغادرته ، أعطى Zhuge Liang Zhao Yun (أفضل رجل) ثلاث حيل ، قائلاً إنها ستحل المشكلة الصعبة عن طريق تفكيكها وفقًا لسر السماء. مهلا ، دعنا نقول ، إنها حلت المشكلة الكبيرة حقًا. في النهاية ، رافق تشو يو زوجته ثم كسر قواته. لنرى أولاً كيف يبدو هذا المشهد.
دعنا نتحدث أولاً عن العناصر الموجودة في هذا المشهد: ثلاث حيل ذكية وخدعة ذكية واحدة وخدعة ذكية واحدة. أعطى الخدعة الذكية من قبل الأخ ليانغ. تُعرف الخدعة الذكية عادة باسم الخدعة الذكية. ثم تشاو يون هو عامل يخرج الخدعة الذكية ، وينفذها ، ثم يفوز. كيف تعبر عن هذه باستخدام برامج Java؟
لنلقي نظرة على الصورة أولاً؟
الحيل الثلاث هي نفس النوع من الأشياء ، لذلك دعونا نكتب واجهة:
حزمة com.yangguangfu.strategy ؛ /**** Author [email protected]: AFU* حدد أولاً واجهة استراتيجية ، وهي واجهة الحيل الثلاثة التي أعطاها Zhuge Liang to Zhao Yun. */الواجهة العامة isrategy {// كل خدعة هي خوارزمية قابلة للتنفيذ. void العام التشغيل () ؛ }
ثم اكتب ثلاث فصول تنفيذ ، هناك ثلاث حيل ذكية:
خطة ذكية: وصول أولا إلى وو:
حزمة com.yangguangfu.strategy ؛ /**** Author [email protected]: A FU* اطلب من السيد Qiao المساعدة ، بحيث لا يمكن لـ Sun Quan قتل Liu Bei. */ Public Class Backdoor تنفذ isrategy {Override public void bowerate () {system.out.println ("البحث عن مساعدة Qiao Guo القديمة ، دع وو غووتاي يضغط على Sun Quan حتى لا تستطيع Sun Quan قتل Liu Bei ...") ؛ }}
الحيلة الثانية: يرجى إعطاء وو غوتاي ضوء أخضر واتركه:
حزمة com.yangguangfu.strategy ؛ /**** Author [email protected]: a fu* يرجى إعطاء Wu Guotai ضوء أخضر. */ Class GivengReenlight Public Passionments {Override public void bowerate () {system.out.println ("يرجى إعطاء Wu Guotai الضوء الأخضر ، دعه يذهب!") ؛ }}
المهارة 3: تقطع السيدة صن الخلف وتمنع المطاردين:
حزمة com.yangguangfu.strategy ؛ /**** Author [email protected]: AFU* قطعت السيدة صن الخلف وحظرت المطاردين. */ public class Blackenemy ينفذ isrategy {override public void bowerate () {system.out.println ("Mrs. Sun يقطع الظهر ، يمنع المطاردين ...") ؛ }}
حسنًا ، الجميع ، هناك ثلاث حيل ، لذلك هناك مكان لوضعهم في الحافة:
حزمة com.yangguangfu.strategy ؛ / ** * * Author [email protected]: AFU * */ CLASS CONTEXT {Private ISTRETGY RESTRANGE ؛ // constructor ، أي خدعة تريد استخدام السياق العام (isrategy strategy) {this.strategy = strategy ؛ } void public propate () {this.strategy.operate () ؛ }}
ثم كان تشاو يون يحمل ثلاث نصائح بشجاعة كبيرة ، وسحب الرجل العجوز ليو بي ، الذي دخل بالفعل في صفوف كبار السن وأراد الزواج من فتاة بريئة ، للزواج من زوجته. مرحبًا ، ناهيك عن حيل الأخ ليانغ الثلاثة جيدة حقًا. ينظر:
حزمة com.yangguangfu.strategy ؛ فئة عامة Zhaoyun { /*** ظهر Zhao Yun. وفقًا لتفسير Zhuge Liang له ، قام بتفكيك الحيل بدوره*/ الفراغ الثابت العام (String [] args) {سياق السياق ؛ // عندما وصلت إلى WU لأول مرة ، قمت بتفكيك النظام الأول. السياق = سياق جديد (جديد backdoor ()) ؛ context.operate () ؛ // execute system.out.println ("/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n") ؛ // عندما كان ليو بي ، سعيدا بعدم راغبة في عدم الاستعداد لأن يكون غير راغب في عدم الاستعداد لأن يكون غير مستعد لأن يكون غير مستعد لأن يكون غير مستعد لعدم الاساغب في عدم الاستعداد لعدم الاستعداد لعدم استعداده من عدم استعداده من عدم الاستعداد لأن لا ترغب في عدم الاستعداد لأن لا ترغب في عدم الاستعداد لأن لا ترغب في عدم استعدادك من عدم الاستعداد لأن لا ترغب في عدم الاستعداد لأن لا ترغب في عدم الاستعداد لأن لا ترغب في عدم الاستعداد لأن لا ترغب في عدم استعدادهم من عدم الاستعداد لأن تكون على استعداد لأن تكون على استعداد لأن تكون على استعداد لأن تكون على استعداد لأن تكون على استعداد لأن تكون على استعداد لأن تكون على استعداد لأن تكون مستعدًا لأن تكون مستعدًا للاغرب عن عدم استعدادها من عدم استعدادها من عدم استعداد لا تكون راغبًا في عدم الاستعداد لأن تكون غير راغب في عدم الاستعداد لأن تكون غير راغب في عدم الاستعداد لأن تكون غير راغب في عدم الاستعداد لأن تكون غير راغب في عدم الاستعداد لأن تكون غير مستعد لأن تكون غير مستعد لأن تكون على استعداد لعدم رغبته في عدم الاستعداد لعدم استعدادك من عدم الاستعداد من عدم الاستعداد لأن يكونوا غير مستعدين من عدم الاستعداد من عدم الاستعداد من عدم استعداده من عدم الاستعداد من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعدادهم من عدم استعداد غير راغب في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في عدم رغبته في تفكيك نظام النصيحة الثالثة. السياق = سياق جديد (Blackenemy () جديد) ؛ Context.Operate () ؛ // Dispassemble and Execute System.out.println("/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n /n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n /n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n /n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n
مزايا وعيوب وضع السياسة هي المزايا الرئيسية لوضع السياسة هي:
يمكن تبديل فصول السياسة بحرية ، وبما أن فئات السياسة تنفذ نفس التجريد ، يمكن تبديلها بحرية.
من السهل التوسع ، أن إضافة سياسة جديدة سهلة للغاية لنموذج السياسة ، ويمكن توسيعها بشكل أساسي دون تغيير الكود الأصلي.
تجنب استخدام شروط متعددة. إذا لم تستخدم وضع السياسة ، ولجميع الخوارزميات ، يجب استخدام البيانات الشرطية للاتصال ، والخوارزمية لاستخدامها من خلال الحكم الشرطي. في المقالة السابقة ، ذكرنا أن استخدام الحكم الشرطي المتعدد يصعب الحفاظ عليه.
هناك نوعان من العيوب الرئيسية لنموذج الإستراتيجية:
إن الحفاظ على مختلف فصول السياسة سيؤدي إلى التنمية الإضافية. قد يكون لديك خبرة في هذا الصدد: بشكل عام ، يتجاوز عدد فصول السياسة 5 ، وهو أمر أكثر إثارة للقلق.
يجب أن تتعرض جميع فئات السياسة للعميل (المتصل) لأن الأمر متروك للعميل لاستخدامه ، لذلك يجب على العميل معرفة السياسات الموجودة هناك وفهم الاختلافات بين السياسات المختلفة ، وإلا فإن العواقب خطيرة. على سبيل المثال ، هناك نموذج استراتيجي لفرز الخوارزميات التي توفر ثلاث خوارزميات: الفرز السريع ، فرز الفقاعات ، وتحديد الفرز. قبل أن يستخدم العميل هذه الخوارزميات ، هل يجب أن يفهموا تطبيق هذه الخوارزميات الثلاثة؟ على سبيل المثال ، يحتاج العميل إلى استخدام حاوية ، يتم تنفيذها بواسطة القوائم والصفائف المرتبطة. هل يحتاج العميل أيضًا إلى فهم الفرق بين القوائم المرتبطة والصفائف؟ في هذا الصدد ، يتعارض مع القانون الديميتي.
السيناريوهات المعمول بها
عند القيام بتصميم موجه نحو الكائن ، يجب أن تكون على دراية بنمط السياسة ، لأنه في الأساس ميراث وتعدد الأشكال في موجه نحو الكائن. بعد قراءة الكود العام لنمط السياسة ، أعتقد أنه حتى لو لم أسمع قط عن نمط السياسة من قبل ، كان لا بد لي من استخدامه أثناء عملية التطوير ، أليس كذلك؟ على الأقل في حالتين التاليتين ، يمكنك التفكير في استخدام نموذج الإستراتيجية.
المنطق الرئيسي للعديد من الفئات هو نفسه ، وهناك اختلافات طفيفة فقط في الخوارزمية وسلوك المنطق الجزئي.
هناك العديد من السلوكيات المماثلة ، أو الخوارزميات ، ويحتاج العميل إلى تحديد أي منها يجب استخدامه ديناميكيًا ، بحيث يمكنك استخدام نمط السياسة لتغليف هذه الخوارزميات حتى يتصل العميل.
نموذج الإستراتيجية هو نموذج بسيط ويستخدم بشكل شائع. عندما نطور ، نستخدمها غالبًا عن قصد أو عن غير قصد. بشكل عام ، لن يتم استخدام نموذج الإستراتيجية بمفرده ، ومن الأكثر شيوعًا استخدامه بطريقة مختلطة مع وضع طريقة القالب ، ووضع المصنع ، وما إلى ذلك.