نمط سلسلة المسؤولية: يتم توصيل كائنات متعددة بسلسلة عن طريق المراجع المقابلة للمنزل التالي لكائناتها ، ويتم تمرير الطلب على هذه السلسلة حتى يقوم كائن مستلم على السلسلة بمعالجة الطلب. نظرًا لأن العميل الطالب لا يعرف من الذي سيتعامل في نهاية المطاف على الطلب على السلسلة ، يمكن للنظام إعادة تنظيم وتخصيص المسؤوليات ديناميكيًا دون التأثير على العميل ، وبالتالي تجنب الاقتران بين مرسل الطلب ومعالج الطلب.
هناك ثلاثة أدوار متورطة في سلسلة المسؤولية:
1. دور المعالج التجريدي
2. دور معالج محدد
3. مثال صغير على مرسل الطلب: لنفترض أنك تذهب لشراء منزل ، وتحتاج إلى المساومة عند شراء منزل. تختلف مواقع الشخص الذي يبيع المنزل ، كما أن الأسعار المخفضة مختلفة أيضًا. يمكن أن تشكل المواقف المختلفة سلسلة لمعالجة الطلب. لقد حددنا مبدئيًا: * يمكن أن يقدم المبيعات على مستوى القاعدة فقط خصم 3 ٪ * مدير المبيعات: 5 ٪ خصم * مدير المبيعات: 8 ٪ خصم * رئيسه: 10 ٪ خصم
مثيل جافا
مخطط الفصل:
/ *** مسؤولية مجردة*/ فئة مجردة عامة ifilter {private ifilter succistor ؛ ifilter getSuccessor () {Return Succistor ؛ } public void setSuccessor (ifilter succistor) {this.successor = suckor ؛ } Public Abstract void handlefilter () ؛ Public Abstract void handlefilter2 () ؛ } / *** مسؤوليات محددة*/ الفئة العامة ConcreteFilter يمتد ifilter {اسم السلسلة الخاصة ؛ concretefilter العامة (اسم السلسلة) {this.name = name ؛ } Override public void handlefilter () { / * * تعامله أولاً ، إذا كان هناك خليفة ، فتعامل معه مرة واحدة * / system.out.println (الاسم + "طلب المعالجة") ؛ if (getSuccessor ()! = null) {getSuccessor (). handlefilter () ؛ }} Override public void handlefilter2 () { / * * إذا كان هناك خليفة ، فسيتم التعامل مع الخلف بنفسك. خلاف ذلك ، سوف تتعامل معها بنفسك*/ if (getSuccessor ()! = null) {getSuccessor (). handlefilter2 () ؛ } آخر {system.out.println (name + "request Worded") ؛ }}} اختبار الفئة العامة {public static void main (string [] args) {ifilter filter1 = new ConcreteFilter ("Semission-Filter") ؛ // إذن مرشح الإذن ifilter filter2 = new concretefilter ("style-filter") Filter1.SetSuccessor (Filter2) ؛ Filter2.SetSuccessor (Filter3) ؛ System.out.println ("----- تتم معالجة ما يلي من قبل كل معالج (بما في ذلك الخلفاء) ، والترتيب هو أيضا تمريرة مستوى المستوى ------") ؛ filter1.handlefilter () ؛ System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------مطبعة:
------ فيما يلي عملية كل معالج (بما في ذلك الخلفاء) ، والترتيب هو أيضًا مستوى تلو الآخر ------- مرشح الإذن يتعامل مع مرشح لاحقة الطلب مع مرشح نمط الطلب يتولى الطلب ------- ما يلي هو العملية الأخيرة successor---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------