คำจำกัดความ: ห่วงโซ่ของรูปแบบความรับผิดชอบสร้างห่วงโซ่ของวัตถุตัวรับสำหรับคำขอ รูปแบบนี้ให้ประเภทของคำขอแยกผู้ส่งและผู้รับของคำขอ รูปแบบการออกแบบประเภทนี้เป็นของรูปแบบพฤติกรรม ในโหมดนี้โดยปกติผู้รับแต่ละคนจะมีการอ้างอิงไปยังผู้รับรายอื่น หากวัตถุไม่สามารถประมวลผลคำขอได้จะส่งคำขอเดียวกันไปยังตัวรับสัญญาณถัดไปและอื่น ๆ
คุณสมบัติ: 1. ลดระดับการมีเพศสัมพันธ์ มันแยกผู้ส่งและผู้รับของคำขอ
2. ทำให้วัตถุง่ายขึ้น สิ่งนี้ทำให้วัตถุไม่จำเป็นต้องรู้โครงสร้างของห่วงโซ่
3. เพิ่มความยืดหยุ่นในการกำหนดความรับผิดชอบให้กับเป้าหมาย โดยการเปลี่ยนสมาชิกในห่วงโซ่หรือระดมคำสั่งซื้อของพวกเขาจะช่วยให้การเพิ่มหรือการลบความรับผิดชอบแบบไดนามิก
4. สะดวกมากในการเพิ่มคลาสการประมวลผลคำขอใหม่
แอปพลิเคชันในการพัฒนาระดับองค์กรและเฟรมเวิร์กที่ใช้กันทั่วไป: ฤดูใบไม้ผลิ, struts interceptor, ตัวกรอง servlet
ตัวอย่างเฉพาะ:
/** * นี่คือตัวอย่างของการลาของ บริษัท : * 1 มีคนลา (เหตุการณ์) *2 การอนุมัติของหัวหน้าทีมโครงการ: การอนุมัติสามารถอนุมัติได้น้อยกว่าสามวันและขอผู้บังคับบัญชามากกว่าสามวัน*3 การอนุมัติของหัวหน้าแผนก: การอนุมัติสามารถอนุมัติได้น้อยกว่าสิบวันและขอผู้บังคับบัญชามากกว่าสิบวัน*4 การอนุมัติของผู้จัดการทั่วไป: การอนุมัติสามารถอนุมัติได้น้อยกว่า 30 วันและไม่อนุมัติมากกว่า 30 วัน*/การสาธิตคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เหตุการณ์เหตุการณ์ = เหตุการณ์ใหม่ ("โปรแกรมเมอร์", 32, "กลับไปที่บ้านเกิดเพื่อเยี่ยมญาติ"); ผู้นำ a = new Groupleader ("Zhang San"); ผู้นำ b = ผู้จัดการคนใหม่ ("Li Si"); ผู้นำ C = New GeneralManager ("Wang Wu"); // ระบุโหมดความรับผิดชอบ A.SetNextLeader (B); B.SetNextLeader (C); a.handler (เหตุการณ์); }}/*** วัตถุเหตุการณ์เหตุการณ์การประมวลผลเฉพาะในห่วงโซ่แห่งความรับผิดชอบ* อินสแตนซ์นี้เป็นเรื่องของการขอกิจกรรมลา*/คลาส {ชื่อสตริงส่วนตัว; วัน INT ส่วนตัว; เหตุผลสตริงส่วนตัว เหตุการณ์สาธารณะ (ชื่อสตริง, วัน int, เหตุผลสตริง) {super (); this.name = ชื่อ; นี่วัน = วัน; this.reason = เหตุผล; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getDays () {วันกลับ; } public void setDays (วัน int) {this.days = วัน; } Public String getReason () {return Reason; } โมฆะสาธารณะ setReason (เหตุผลสตริง) {this.reason = เหตุผล; }}/*** วัตถุโซ่ความรับผิดชอบบทคัดย่อวัตถุโซ่ความรับผิดชอบจริงทั้งหมดต่อไปนี้ได้รับการสืบทอดจากวัตถุนี้*/ผู้นำคลาสนามธรรม {ชื่อสตริงส่วนตัว; ผู้นำที่ได้รับการคุ้มครอง NextLeader; // วัตถุความรับผิดชอบต่อไปในห่วงโซ่แห่งความรับผิดชอบนี่เป็นพื้นฐานสำหรับการรักษาห่วงโซ่ของความรับผิดชอบผู้นำสาธารณะ (ชื่อสตริง) {super (); this.name = ชื่อ; } โมฆะสาธารณะ setNextLeader (ผู้นำ NextLeader) {this.nextLeader = NextLeader; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } ตัวจัดการโมฆะบทคัดย่อที่ได้รับการป้องกัน (เหตุการณ์เหตุการณ์);}/*** วัตถุแรกในกระบวนการลา, ผู้นำกลุ่ม*/คลาส Groupleader ขยายผู้นำ {public Groupleader (ชื่อสตริง) {super (ชื่อ); } ตัวจัดการโมฆะป้องกัน (เหตุการณ์เหตุการณ์) {if (event.getDays () <3) { System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - เหตุผลในการลา: " + event.getReason () +" | "); System.out.println ("ผู้อนุมัติ:"+this.getName ()+"(หัวหน้ากลุ่ม), ผ่าน!"); System.out.println (); } else {system.out.println (this.getName ()+"(หัวหน้างาน) ไม่มีสิทธิ์!"); this.nextleader.handler (เหตุการณ์); }}}/*** วัตถุที่สองในกระบวนการลาผู้จัดการแผนก*/ผู้จัดการชั้นเรียนขยายผู้นำ {ผู้จัดการสาธารณะ (ชื่อสตริง) {super (ชื่อ); } ตัวจัดการโมฆะป้องกัน (เหตุการณ์เหตุการณ์) {if (event.getDays () <10) { System.out.println ("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - System.out.println (this.getName ()+"(ผู้จัดการทั่วไป), ไม่มีสิทธิ์!"); 30) {System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "+event.getName ()+" | "); system.out.println (" จำนวนวันลา: "+event.getDays ()+" วัน "+" | "); system.out.println (" | เหตุผลสำหรับการลา: "+event.getReason ()+" | "); system.out.println (" System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "+event.getName ()+" | "); system.out.println (" จำนวนวันลา: "+event.getDays ()+" วัน "+" | "); system.out.println (" เหตุผลสำหรับการลา: "event.getReason ()+" | "); "); System.out.println ();}}}รูปแบบห่วงโซ่ความรับผิดชอบส่วนใหญ่ใช้สำหรับการพัฒนาเช่นการควบคุมกระบวนการ เมื่อเทียบกับแบบจำลอง IF-ELSE นั้นมีประสิทธิภาพสูงกว่าในการปรับเปลี่ยนรหัสและการรวมซึ่งเอื้อต่อการบำรุงรักษารหัส ยิ่งไปกว่านั้นเมื่อมีความจำเป็นที่จะต้องเพิ่มวัตถุในห่วงโซ่ความรับผิดชอบเราจำเป็นต้องใช้คลาสโซ่ความรับผิดชอบเฉพาะจากนั้นสร้างวัตถุความรับผิดชอบและรักษาความสัมพันธ์ของห่วงโซ่ความรับผิดชอบโดยไม่มีค่าใช้จ่ายมากขึ้น ยิ่งไปกว่านั้นในการออกแบบจริงหลายครั้งการบำรุงรักษาห่วงโซ่ความรับผิดชอบจะดำเนินการในไฟล์กำหนดค่าซึ่งจะประหยัดเวลาในการพัฒนามากขึ้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น