تشارككم الأمثلة في هذه المقالة مع نموذج استراتيجية Java للرجوع إليه. المحتوى المحدد كما يلي
1. نمط الإستراتيجية هو نموذج بسيط نسبيًا ، يسمى أيضًا نمط السياسة.
التعريف كما يلي:
حدد عائلة من الخوارزميات ، وتغليف كل واحدة ، وجعلها قابلة للتبديل.
(حدد مجموعة من الخوارزميات ، وتغليف كل خوارزمية ، وجعلها قابلة للتبديل.)
مخطط الطبقة العامة لنمط السياسة هو كما يلي:
ثلاثة أدوار لنموذج السياسة:
● دور تغليف السياق ، والمعروف أيضًا باسم دور السياق ، يلعب دورًا للتغليف الذي يربط الماضي والمستقبل ، ويمنع الوصول المباشر للوحدات النمطية عالية المستوى إلى السياسات والخوارزميات ، ويغلف التغييرات المحتملة.
● الإستراتيجية التجريدية الاستراتيجية الاستراتيجية وتجريد الأسرة الخوارزمية ، وعادة ما تكون واجهة ، تحدد الأساليب والسمات التي يجب أن يكون لكل استراتيجية أو خوارزمية ،
● الإستراتيجية الملموسة يقوم دور الإستراتيجية المحددة بتطبيق العمليات في السياسات التجريدية ، ويحتوي هذه الفئة على خوارزميات محددة.
يتمثل نمط السياسة في تمرير سياسة محددة في مُنشئ الدور المغلف ثم تنفيذ هذه السياسة.
الكود المصدر العام لوضع السياسة هو كما يلي:
اختبار الطبقة العامة 3 {public static void main (string [] args) {// إعلان استراتيجية استراتيجية استراتيجية محددة = concretestrategy1 () جديدة ؛ // إعلان سياق سياق كائن السياق = سياق جديد (استراتيجية) ؛ // تنفيذ سياق الطريقة المغلفة. adanythinig () ؛ }} استراتيجية الواجهة {// القواعد الحسابية لوضع السياسة الفراغ العام dosomething () ؛ } class concretestrategy1 تنفذ الإستراتيجية {public void dosomething () {system.out.println ("القواعد الحسابية لاستراتيجية محددة 1") ؛ }} class concretestrategy2 تنفذ الإستراتيجية {public void dosomething () {system.out.println ("القواعد الحسابية لاستراتيجية محددة 2") ؛ }} سياق الفئة {// الاستراتيجية التجريدية الاستراتيجية الخاصة ؛ // يعين المنشئ استراتيجيات محددة السياق العام (الاستراتيجية _strategy) {this.strategy = _strategy ؛ }. }}مزايا نموذج الاستراتيجية:
● يمكن تبديل الخوارزمية بحرية
يتم تعريف هذا من خلال نموذج السياسة نفسه. طالما تم تنفيذ الاستراتيجية المجردة ، فإنها تصبح عضوًا في عائلة السياسة ، حيث يتم تغليفها من خلال أدوار التغليف ، مما يضمن توفير استراتيجية "قابلة للتبديل" إلى العالم الخارجي.
● تجنب استخدام شروط متعددة للحكم
إذا لم يكن هناك نموذج سياسي ، دعونا نفكر في شكله؟ الأسرة الإستراتيجية لديها 5 خوارزميات استراتيجية. تحتاج إلى استخدام الإستراتيجية A في وقت ما ثم استخدام الإستراتيجية A في وقت ما.
كيف تصمم استراتيجية ب؟ استخدام عبارات مشروطة متعددة؟ ليس من السهل الحفاظ على البيانات المتعددة المشروط ، ويتم تعزيز احتمال وجود أخطاء إلى حد كبير. بعد استخدام وضع السياسة ، يمكن للوحدات الأخرى أن تقرر الإستراتيجية التي يجب تبنيها. واجهة الوصول التي توفرها عائلة السياسة إلى الخارج هي فئة التغليف ، والتي تبسط العمليات وتجنب حكم البيان المشروط.
● قابلية التوسع الجيدة
هذا لا يجب أن يقول ما يجب أن يفعله ، لأنه واضح للغاية. من السهل جدًا إضافة استراتيجية إلى النظام الحالي. فقط قم بتنفيذ الواجهة وليس هناك حاجة لتعديل أي شيء آخر. يشبه المكون الإضافي الذي يمكن تفكيكه مرارًا وتكرارًا ، والذي يتوافق بشكل كبير مع مبدأ OCP.
عيوب أنماط السياسة:
● يزداد عدد فئات السياسة. كل استراتيجية هي فئة ، وإمكانية إعادة الاستخدام صغيرة جدًا ، ويزداد عدد الطبقات.
● يجب كشف جميع فصول الإستراتيجية
استخدم السيناريوهات لوضع السياسة:
● فئات متعددة لها سيناريوهات مختلفة قليلاً فقط في الخوارزميات أو السلوكيات.
● السيناريوهات التي تحتاج إلى تبديل الخوارزمية بحرية.
● السيناريوهات التي يجب حظر قواعد الخوارزمية.
2. تمديد وضع السياسة - تعداد السياسة
يتم تعريف تعداد السياسة على النحو التالي:
● إنه تعداد.
● إنه تعداد لأنماط الإستراتيجية المركزة.
الأمثلة على النحو التالي:
سؤال: أدخل 3 معلمات وأداء عمليات الإضافة والطرح. اثنان من المعلمات هما نوع int ، والمعلمة المتبقية هي نوع السلسلة. يمكن اختيار رمزان فقط "+" و "-". لا تفكر في أي التحقق المعقد. ما نقوم به هو اختبار الصندوق الأبيض ، وما ندخله هو نوع int القياسي ونوع السلسلة المتوافقة.
استيراد java.util.arrays ؛ الفئة العامة test3 {public static void main (string [] args) {// المعلمتين المدخلتين هما الرقم int a = integer.parseint (args [0]) ؛ رمز السلسلة = args [1] ؛ // الرمز int b = integer.parseint (args [2]) ؛ System.out.println ("معلمة الإدخال هي:"+صفائف. toString (args)) ؛ System.out.println ("النتيجة الجارية هي:"+A+Symbol+B+"="+CANCALUTY.ADD.EXEC (A ، B)) ؛ }} enum calculator {// إضافة عملية إضافة ("+") {public int exec (int a ، int b) {return a+b ؛ }} ، // subtraction Operation sub (" -") {public int exec (int a ، int b) {return a - b ؛ }} ؛ قيمة السلسلة = "" ؛ // تحديد نوع قيمة العضو نوع الآلة الحاسبة الخاصة (السلسلة _value) {this.value = _value ؛ } // الحصول على قيمة التعداد الأعضاء السلسلة العامة getValue () {return this.value ؛ } // إعلان وظيفة مجردة الملخص العام int exec (int a ، int b) ؛ }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.