التعريف: تنشئ نمط سلسلة المسؤولية سلسلة من كائن المتلقي للطلب. يعطي هذا النمط نوع الطلب ، وتفكك المرسل ومستقبل الطلب. هذا النوع من نمط التصميم ينتمي إلى النمط السلوكي. في هذا الوضع ، عادة ما يحتوي كل مستلم على إشارة إلى مستلم آخر. إذا لم يتمكن كائن من معالجة الطلب ، فسيقوم بتمرير نفس الطلب إلى المتلقي التالي ، وما إلى ذلك.
الميزات: 1. الحد من درجة الاقتران. إنه يفصل المرسل والمستقبل للطلب.
2. تبسيط الكائن. هذا يجعل الكائن ليس ضروريًا لمعرفة بنية السلسلة.
3. تعزيز المرونة لتعيين المسؤوليات للهدف. من خلال تغيير الأعضاء في السلسلة أو تعبئة ترتيبهم ، فإنه يسمح بإضافة أو حذف المسؤوليات الديناميكية.
4. من المريح للغاية إضافة فصول معالجة الطلبات الجديدة.
التطبيقات في تطوير مستوى المؤسسة والأطر شائعة الاستخدام: الربيع ، التقاطعات الدعامات ، مرشح servlet
أمثلة محددة:
/** * هنا مثال على إجازة الشركة: * 1. شخص ما يأخذ إجازة (حدث) *2. موافقة قائد فريق المشروع: يمكن الموافقة على الموافقة على أقل من ثلاثة أيام ، وتطلب الرؤساء أكثر من ثلاثة أيام*3. موافقة المشرف على القسم: يمكن الموافقة على الموافقة على أقل من عشرة أيام ، وتطلب من الرؤساء أكثر من عشرة أيام*4. موافقة المدير العام: يمكن الموافقة على الموافقة على أقل من 30 يومًا ، ولا توافق على أكثر من 30 يومًا*/Demo Public Class {Public Static Void Main (string [] args) {event event = حدث جديد ("البرمجي" ، 32 ، "العودة إلى Hometown to Hometown to Most") ؛ الزعيم A = Groupleader جديد ("Zhang San") ؛ زعيم ب = مدير جديد ("لي سي") ؛ الزعيم C = New GeneralManager ("Wang Wu") ؛ // حدد سلسلة المسؤولية A.SetNextLeader (B) ؛ B.SetNextLeader (C) ؛ A.Handler (الحدث) ؛ }}/*** كائن الحدث ، أحداث معالجة محددة في سلسلة المسؤولية* هذه الحالة هي مسألة طلب الإجازة*/الفئة حدث {private string name ؛ أيام خاصة سبب سلسلة خاصة الحدث العام (اسم السلسلة ، أيام int ، سبب سلسلة) {super () ؛ this.name = name ؛ هذا. أيام = أيام ؛ this.reason = سبب ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getDays () {return days ؛ } setDays public void (int days) {this.days = days ؛ } السلسلة العامة getReason () {return aspress ؛ } public void setReason (string reason) {this.reason = easure ؛ }}/*** كائن سلسلة المسؤولية التجريدية ، جميع كائنات سلسلة المسؤولية الفعلية التالية تترث من هذا الكائن*/مجردة الفئة زعيم {اسم السلسلة الخاصة ؛ الزعيم المحمي NextLeader ؛ // كائن المسؤولية التالي في سلسلة المسؤولية ، وهذا هو الأساس للحفاظ على سلسلة المسؤولية القائد العام (اسم السلسلة) {super () ؛ this.name = name ؛ } public void setNextLeader (Leader NextLeader) {this.nextLeader = nextLeader ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } معالج الفراغ المحمي المحمي (حدث الحدث) ؛}/*** الكائن الأول في عملية الإجازة ، قائد المجموعة*/class يمتد قائد {public groupleader (اسم السلسلة) {super (name) ؛ } معالج الفراغ المحمي (حدث الحدث) {if (event.getDays () <3) { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ سبب الإجازة: " + event.getReason () +" | ") ؛ System.out.println ("Adderfer:"+this.getName ()+"(قائد المجموعة) ، تمرير!") ؛ System.out.println () ؛ } آخر {system.out.println (this.getName ()+"(المشرف) ، لا أذونات!") ؛ this.nextLeader.Handler (event) ؛ }}}/*** الكائن الثاني في عملية الإجازة ، مدير القسم*/مدير الفئة يمتد Leader {Public Manager (اسم السلسلة) {super (name) ؛ } معالج الفراغ المحمي (حدث الحدث) {if (event.getDays () <10) { System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- System.out.println (this.getName () (المدير العام) ، لا أذونات! ") ؛ 30){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ offender: "+event.getName ()+" | ") ؛ system.out.println (" عدد أيام الإجازة: "+event.getDays ()+" أيام "+" | ") System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The leave requester: "+event.getName ()+" |. ") ؛ system.out.println () ؛}}}يستخدم نموذج سلسلة المسؤولية بشكل أساسي للتطوير مثل التحكم في العملية. بالمقارنة مع النموذج IF-ELSE ، فإنه يتمتع بكفاءة أعلى في تعديل الكود وتكامله ، وهو أكثر مواتية لصيانة الكود. علاوة على ذلك ، عندما يكون من الضروري إضافة كائنات في سلسلة المسؤولية ، فإننا نحتاج إلى تنفيذ فئة سلسلة مسؤولية محددة ، ثم إنشاء كائن مسؤولية ، والحفاظ على علاقة سلسلة المسؤولية ، دون أن تكون أكبر. علاوة على ذلك ، في التصميم الفعلي ، في كثير من الأحيان ، يتم تنفيذ صيانة سلسلة المسؤولية في ملف التكوين ، مما سيوفر المزيد من وقت التطوير.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.