تصف هذه المقالة مبدأ واستخدام نمط تصميم Java. شاركه للرجوع إليه ، على النحو التالي:
يحدد نمط السياسة سلسلة من الخوارزميات ويغلف كل خوارزمية ، مما يجعلها قابلة للاستبدال مع بعضها البعض. يسمح نمط السياسة للخوارزمية بالتغيير بشكل مستقل عن العملاء الذين يستخدمونه. من بينها ، تستخدم فئة Treeset و Tremap في JDK نمط السياسة. هاتان الفئتان عبارة عن فئتين تجميع ، وقواعد الفرز تعادل سلسلة من الخوارزميات المحددة في نمط السياسة ، وفئة التجميع تعادل فئة البيئة في نمط السياسة للمستخدمين لاستخدامها. فقط مع العلم أن Treeset و Treemap يتم فرزها. أما بالنسبة لكيفية الفرز ، يتم تحديدها بواسطة خوارزمية الفرز.
يتكون نموذج الإستراتيجية من ثلاثة أجزاء: دور السياسة التجريدية ، دور سياسي محدد ، ودور بيئي.
دور السياسة التجريدية : فئة السياسة ، عادة ما يتم تنفيذها بواسطة واجهة أو فئة مجردة.
دور استراتيجية محددة : يتم تنفيذ فئة الإستراتيجية التجريدية ويتم تعبئة الخوارزميات والسلوكيات ذات الصلة.
دور البيئة : يحمل إشارة إلى فئة السياسة ويتم استدعاؤه في النهاية إلى العميل.
فيما يلي مثال على رمز نمط السياسة البسيط:
1. دور الاستراتيجية التجريدية : تحديد استراتيجية الواجهة.
Package com.test ؛/** * strategy pattern pattern robed * @Auuthor Zhouwen * */public interface strategy {public int calculate (int a ، int b) ؛}2. دور استراتيجية محددة : تنفيذ واجهة الإستراتيجية. في المثال ، يتم تنفيذ تشغيل الإضافة والطرح والضرب والقسمة.
حزمة com.test ؛/*** وضع السياسة فئة استراتيجية محددة* تنفيذ عمليات الإضافة* Author Zhouwen**/public class addstrategy تنفيذ استراتيجية {Override Public int calculate (int a ، int b) {return a + b ؛ }} حزمة com.test ؛/*** وضع السياسة فئة استراتيجية محددة* تنفيذ عملية الطرح* Author Zhouwen**/public class isstrategy strategy {Override public int calculate (int a ، int b) {return a - b ؛ }} حزمة com.test ؛/** * وضع السياسة فئة استراتيجية محددة * تنفيذ عملية الضرب * Author Zhouwen * */public class multiplystragety تنفيذ استراتيجية {Override public int calculate (int a ، int b) {return a * b ؛ }} حزمة com.test ؛/*** وضع السياسة فئة استراتيجية محددة* تنفيذ عملية التقسيم* Author Zhouwen**/الطبقة العامة Dividestrategy تنفذ الإستراتيجية {Override public int (int a ، int b) {return a/b ؛ }}3. دور البيئة : تحديد دور تجريدي في دور البيئة وفضح طريقة الحساب للعميل للاتصال.
حزمة com.test ؛/** * فئة بيئة وضع السياسة * Author Zhouwen * */Public Class Environment {استراتيجية الاستراتيجية الخاصة ؛ البيئة العامة (استراتيجية الاستراتيجية) {this.strategy = الاستراتيجية ؛ } // استخدم لتغيير السياسة public void setstrategy (استراتيجية الاستراتيجية) {this.strategy = strategy ؛ } الاستراتيجية العامة getTrategy () {Return Strategy ؛ }. }}4. أخيرًا اكتب رمز العميل:
حزمة com.test ؛ client client {public static void main (string [] args) {addstrategy addstrategy = new addstrategy () ؛ البيئة البيئة = بيئة جديدة (addstrategy) ؛ System.out.println (evesice.calculate (3 ، 4)) ؛ OrvictStrategy KrundTygy = new OrvictStrategy () ؛ البيئة. System.out.println (evesice.calculate (3 ، 4)) ؛ multiplystragety multiplystrategy = جديد multiplystragety () ؛ البيئة. System.out.println (evesice.calculate (3 ، 4)) ؛ dividestrategy dividestrategy = جديد dividestrategy () ؛ البيئة. System.out.println (evesice.calculate (3 ، 4)) ؛ }}تلخيص:
مع System.out.println(environment.calculate(3, 4)); هذا الرمز ، لا نعرف أي فئة التنفيذ تسمى. فقط من خلال معرفة فئة السياسة المحددة التي تنتقل إلى دور البيئة ، نعرف الفئة التي يجب الاتصال بها. يمكن أن يحقق ذلك فصل العميل وخوارزمية السياسة المحددة ، مما يجعل البرنامج سهل التبديل وفهمه وتوسيعه.
مزايا وعيوب نموذج الإستراتيجية:
ميزة:
1. الغرض من نمط السياسة هو تغليف كل خوارزمية في فئة مستقلة مع واجهة مشتركة لمجموعة من الخوارزميات ، بحيث يمكن استبدالها ببعضها البعض. كما هو منصوص عليه في المثال ، يتم استبدال السياسة بالطريقة المحددة.
2. يسمح نمط السياسة للخوارزمية بالتغيير دون التأثير على العميل. استخدم أنماط السياسة لفصل السلوك عن البيئة.
3. فئة البيئة مسؤولة عن الحفاظ على فصول السلوك والاستعلام عنها ، ويتم توفير الخوارزميات المختلفة في استراتيجيات محددة. نظرًا لأن الخوارزمية والبيئة مستقلة ، فإن تعديل الخوارزمية لن يؤثر على البيئة والعميل.
عيب:
1. يجب على العميل معرفة جميع فئات السياسة وتحديد فئة السياسة التي يجب استخدامها وفقًا لتقديرها الخاص.
2. سوف يسبب العديد من الاستراتيجيات.
لمزيد من المحتوى المتعلق بـ Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "مقدمة والبرمجة التعليمية المتقدمة حول البرمجة الموجهة إلى Java" ، و "البرنامج التعليمي حول بنية بيانات Java" و "خوارزمية" و "ملخص مهارات تشغيل Java" ، و "ملخص مهارات تشغيل Java" و "ملخصات Java Cate".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.