คำจำกัดความของห่วงโซ่ความรับผิดชอบ: ห่วงโซ่ความรับผิดชอบ (COR) เป็นชุดของชั้นเรียนที่พยายามประมวลผลการร้องขอ กล่าวอีกนัยหนึ่งเมื่อมีการร้องขอคลาส A ก่อน
วิธีใช้รูปแบบความรับผิดชอบของห่วงโซ่
แม้ว่าย่อหน้านี้ใช้ COR แต่ก็แสดงให้เห็นว่า COR คืออะไร
มีอินเทอร์เฟซตัวจัดการ:
การคัดลอกรหัสมีดังนี้:
ตัวจัดการส่วนต่อประสานสาธารณะ {
โมฆะสาธารณะ handlerequest ();
-
นี่คือตัวอย่างของการจัดการคำขอ
◆ทางออกแรกที่นึกถึงคือ: เพิ่มหลายคำขอลงในอินเทอร์เฟซ:
การคัดลอกรหัสมีดังนี้:
ตัวจัดการส่วนต่อประสานสาธารณะ {
โมฆะสาธารณะด้ามจับ ();
โมฆะสาธารณะด้ามจับ ();
โมฆะสาธารณะ handleformat ();
-
โดยเฉพาะอย่างยิ่งมันเป็นรหัสที่จะใช้อินเทอร์เฟซ:
การคัดลอกรหัสมีดังนี้:
คลาสสาธารณะคอนกรีตแฮนด์เลอร์ใช้ Handler {
ผู้สืบทอดผู้ดูแลส่วนตัว;
Public ConcreteHandler (ผู้สืบทอดผู้ดูแล) {
this.successor = ผู้สืบทอด;
-
โมฆะสาธารณะ HandleHelp () {
// รหัสเฉพาะสำหรับการประมวลผลคำขอช่วยเหลือ ...
-
โมฆะสาธารณะที่จับ Print () {
// ถ้าเป็นงานพิมพ์ให้หันไปประมวลผลการพิมพ์
ผู้สืบทอด. handleprint ();
-
โมฆะสาธารณะ handleformat () {
// ถ้าเป็นรูปแบบให้ไปที่รูปแบบกระบวนการ
SUCTIONER.HANDLEFORMAT ();
-
-
มีสามคลาสการใช้งานที่เฉพาะเจาะจงดังกล่าวด้านบนซึ่งเป็นวิธีการความช่วยเหลือในการประมวลผลและการประมวลผลรูปแบบการพิมพ์และการประมวลผลซึ่งอาจเป็นแนวคิดการเขียนโปรแกรมที่ใช้กันมากที่สุดของเรา
แม้ว่าความคิดนั้นง่ายและชัดเจน แต่ก็มีปัญหาส่วนขยาย
◆โซลูชันที่สอง: เปลี่ยนคำขอแต่ละรายการเป็นอินเทอร์เฟซดังนั้นเราจึงมีรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
อินเทอร์เฟซสาธารณะ HelpHandler {
โมฆะสาธารณะด้ามจับ ();
-
อินเทอร์เฟซสาธารณะ Printhandler {
โมฆะสาธารณะด้ามจับ ();
-
Formathandler ส่วนต่อประสานสาธารณะ {
โมฆะสาธารณะ handleformat ();
-
Concrete Handler ระดับสาธารณะ
ใช้ HelpHandler, Printhandler, Formathandlet {
HelpHandler ส่วนตัวช่วยผู้ผลิต;
Private Printhandler Printsuccessor;
Formathandler Private Formatsuccessor;
Public ConcreteHandler (HelpHandler Helpsuccessor, Printhandler Printsuccessor, Formathandler Formatsuccessor)
-
this.helpsuccessor = Helptuccessor;
this.printsuccessor = printsuccessor;
this.formatsuccessor = formatsuccessor;
-
โมฆะสาธารณะ HandleHelp () {
-
-
Public Void Handleprint () {this.printsuccessor = printsuccessor;}
โมฆะสาธารณะ handleformat () {this.formatsuccessor = formatsuccessor;}
-
เมื่อเพิ่มคำขอคำขอใหม่วิธีนี้จะบันทึกจำนวนการปรับเปลี่ยนของอินเทอร์เฟซเท่านั้นและการใช้งานอินเตอร์เฟสของคอนกรีตแฮนด์เลอร์จะต้องมีการแก้ไข และรหัสนั้นไม่ง่ายและสวยงาม
◆โซลูชัน 3: ใช้วิธีการกำหนดพารามิเตอร์เพียงวิธีเดียวในอินเทอร์เฟซตัวจัดการ:
การคัดลอกรหัสมีดังนี้:
ตัวจัดการส่วนต่อประสานสาธารณะ {
โมฆะสาธารณะ handlerequest (คำขอสตริง);
-
จากนั้นรหัสการใช้งานตัวจัดการมีดังนี้:
คลาสสาธารณะคอนกรีตแฮนด์เลอร์ใช้ Handler {
ผู้สืบทอดผู้ดูแลส่วนตัว;
Public ConcreteHandler (ผู้สืบทอดผู้ดูแล) {
this.successor = ผู้สืบทอด;
-
โมฆะสาธารณะ handlerequest (คำขอสตริง) {
ถ้า (request.equals ("help")) {
// นี่คือรหัสเฉพาะสำหรับการจัดการความช่วยเหลือ} อื่น
// ส่งไปยังผู้สืบทอดต่อไป. handle (คำขอ);
-
-
-
ก่อนอื่นสมมติว่าคำขอเป็นประเภทสตริง แน่นอนเราสามารถสร้างคำขอคลาสพิเศษ
◆โซลูชันสุดท้าย: รหัสของตัวจัดการอินเตอร์เฟสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
ตัวจัดการส่วนต่อประสานสาธารณะ {
โมฆะสาธารณะ handlerequest (คำขอคำขอ);
-
คำจำกัดความของคลาสคำขอ:
คำขอชั้นเรียนสาธารณะ {
ประเภทสตริงส่วนตัว
คำขอสาธารณะ (ประเภทสตริง) {this.type = type;}
สตริงสาธารณะ getType () {return type;}
โมฆะสาธารณะดำเนินการ () {
// รหัสพฤติกรรมเฉพาะที่แท้จริงของคำขอ}
-
จากนั้นรหัสการใช้งานตัวจัดการมีดังนี้:
การคัดลอกรหัสมีดังนี้:
คลาสสาธารณะคอนกรีตแฮนด์เลอร์ใช้ Handler {
ผู้สืบทอดผู้ดูแลส่วนตัว;
Public ConcreteHandler (ผู้สืบทอดผู้ดูแล) {
this.successor = ผู้สืบทอด;
-
โมฆะสาธารณะ handlerequest (คำขอคำขอ) {
if (ขออินสแตนซ์ของ helprequest) {
// นี่คือรหัสเฉพาะสำหรับการจัดการความช่วยเหลือ} อื่นถ้า (ขออินสแตนซ์ของ printrequest) {
request.execute ();
}อื่น
// ส่งไปยังผู้สืบทอดต่อไป. handle (คำขอ);
-
-
-
โซลูชันนี้คือ Cor
1. ข้อดีของ COR: เพราะเป็นไปไม่ได้ที่จะทำนายประเภทของคำขอจากโลกภายนอกเป็นของหากแต่ละชั้นเรียนพบคำขอที่ไม่สามารถดำเนินการได้เพียงแค่ยอมแพ้ สิ่งนี้จะช่วยลดการมีเพศสัมพันธ์ระหว่างชั้นเรียนได้อย่างไม่ต้องสงสัย
2. ข้อเสียของ COR คือความไร้ประสิทธิภาพเนื่องจากการร้องขอความสมบูรณ์อาจต้องถูกสำรวจจนกว่าจะสิ้นสุดก่อนที่มันจะเสร็จสมบูรณ์ ใน Java AWT1.0 การจัดการปุ่มเมาส์คือการใช้ COR
ความสามารถในการปรับขนาดได้ไม่ดีเพราะใน COR จะต้องมีตัวจัดการอินเทอร์เฟซแบบครบวงจร