รูปแบบห่วงโซ่ความรับผิดชอบ: วัตถุหลายชิ้นเชื่อมต่อเป็นห่วงโซ่โดยการอ้างอิงที่สอดคล้องกับบ้านถัดไปของวัตถุของพวกเขาและคำขอจะถูกส่งผ่านไปยังห่วงโซ่นี้จนกว่าจะได้รับวัตถุที่ได้รับในห่วงโซ่กระบวนการร้องขอ เนื่องจากลูกค้าที่ร้องขอไม่ทราบว่าใครจะจัดการกับคำขอในห่วงโซ่ในที่สุดระบบจึงสามารถจัดระเบียบใหม่และจัดสรรความรับผิดชอบแบบไดนามิกโดยไม่ส่งผลกระทบต่อลูกค้าดังนั้นจึงหลีกเลี่ยงการมีเพศสัมพันธ์ระหว่างผู้ส่งคำขอและตัวจัดการคำขอ
มีสามบทบาทที่เกี่ยวข้องในห่วงโซ่แห่งความรับผิดชอบ:
1. บทบาทโปรเซสเซอร์บทคัดย่อ
2. บทบาทตัวจัดการเฉพาะ
3. ตัวอย่างเล็ก ๆ ของผู้ส่งคำขอ: สมมติว่าคุณไปซื้อบ้านและคุณต้องต่อรองเมื่อซื้อบ้าน ตำแหน่งของบุคคลที่ขายบ้านนั้นแตกต่างกันและราคาที่ลดลงก็แตกต่างกันเช่นกัน ตำแหน่งที่แตกต่างกันสามารถสร้างโซ่สำหรับการประมวลผลคำขอ เราตั้งค่าไว้อย่างไม่แน่นอน: * พนักงานขายระดับรากหญ้าสามารถเสนอส่วนลด 3% เท่านั้น * ผู้จัดการฝ่ายขาย: ส่วนลด 5% * ผู้อำนวยการฝ่ายขาย: 8% ส่วนลด * บอส: 10% ส่วนลด
อินสแตนซ์ Java
แผนภาพชั้นเรียน:
/ *** ความรับผิดชอบบทคัดย่อ*/ คลาสนามธรรมสาธารณะ ifilter {ผู้สืบทอด ifilter ส่วนตัว; ifilter public getSuccessor () {return ผู้สืบทอด; } โมฆะสาธารณะ setSuccessor (ผู้สืบทอด ifilter) {this.successor = ผู้สืบทอด; } สาธารณะนามธรรมนามธรรมสาธารณะที่จับ (); บทคัดย่อเป็นโมฆะสาธารณะที่จับ Filter2 (); - / *** ความรับผิดชอบเฉพาะ*/ คลาสสาธารณะคอนกรีตฟิลเตอร์ขยาย ifilter {ชื่อสตริงส่วนตัว; Public ConcreteFilter (ชื่อสตริง) {this.name = name; } @Override โมฆะสาธารณะ handlefilter () { / * * จัดการก่อนถ้ามีผู้สืบทอดจากนั้นจัดการครั้งเดียว * / system.out.println (ชื่อ + "คำขอดำเนินการ"); if (getSuccessor ()! = null) {getSuccessor (). handlefilter (); }} @Override โมฆะสาธารณะ HandleFilter2 () { / * * หากมีผู้สืบทอดผู้สืบทอดจะได้รับการจัดการด้วยตัวเอง มิฉะนั้นคุณจะจัดการด้วยตัวเอง*/ ถ้า (getSuccessor ()! = null) {getSuccessor (). handlefilter2 (); } else {system.out.println (ชื่อ + "คำขอดำเนินการ"); - การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ifilter filter1 = ใหม่คอนกรีตฟิลเตอร์ ("การอนุญาต-กรอง"); // ตัวกรองการอนุญาต IFilter Filter2 = ใหม่คอนกรีตฟิลเตอร์ ( Filter1.SetSuccessor (Filter2); Filter2.SetSuccessor (Filter3); System.out.println ("----- ต่อไปนี้ได้รับการจัดการโดยโปรเซสเซอร์ทุกตัว (รวมถึงผู้สืบทอด) คำสั่งซื้อยังเป็นระดับผ่านระดับ ------"); Filter1.HandleFilter (); System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------พิมพ์:
------ ต่อไปนี้เป็นกระบวนการของโปรเซสเซอร์แต่ละตัว (รวมถึงผู้สืบทอด) และคำสั่งซื้อก็เป็นอีกระดับหนึ่งหลังจากที่อีก ----- กรองกรองจัดการคำขอต่อท้ายกรองจัดการกับรูปแบบการร้องขอการร้องขอจัดการคำขอ ------- ต่อไปนี้เป็นกระบวนการสุดท้าย ผู้สืบทอด ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------