設計模式のChainOfResponsibilityPattern(責任鏈模式)----行為模式
阿新 • • 發佈:2018-04-08
sys 參與 task gen ted 允許 nbsp write linq
一、產生背景
職責鏈模式是一種行為模式,為解除請求的發送者和接收者之間的耦合,而使多個對象都有機會處理這個請求。將這些對象連接成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它。避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。
二、實現方式
職責鏈模式參與者:
? Handler
° 定義一個處理請求的接口
° 實現後繼鏈
? ConcreteHandler
° 處理其所負責的請求
° 可訪問其後繼者
° 如果可處理該請求,則處理;否則將該請求轉發給它的後繼者。
? Client:向鏈上的具體處理者對象提交請求
在職責鏈模式中,Client向Handler提交請求,請求在多個ConcreteHandler對象形成的對象鏈中被傳遞,請求在傳遞的過程中被處理。
三、實例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ChainOfResponsibilityPattern { class Program {static void Main(string[] args) { // Setup Chain of Responsibility Handler h1 = new ConcreteHandler1(); Handler h2 = new ConcreteHandler2(); Handler h3 = new ConcreteHandler3(); h1.SetSuccessor(h2); h2.SetSuccessor(h3);// Generate and process request int[] requests = { 2, 5, 14, 22, 18, 3, 27, 20,1,29 }; foreach (int request in requests) { h1.HandleRequest(request); } Console.ReadLine(); } } public abstract class Handler { protected Handler successor; public void SetSuccessor(Handler successor) { this.successor = successor; } public abstract void HandleRequest(int request); } public class ConcreteHandler1 : Handler { public override void HandleRequest(int request) { if (request >= 0 && request < 10) { Console.WriteLine("{0} handled request {1}", this.GetType().Name, request); } else if (successor != null) { successor.HandleRequest(request); } } } public class ConcreteHandler2 : Handler { public override void HandleRequest(int request) { if (request >= 10 && request < 20) { Console.WriteLine("{0} handled request {1}", this.GetType().Name, request); } else if (successor != null) { successor.HandleRequest(request); } } } public class ConcreteHandler3 : Handler { public override void HandleRequest(int request) { if (request >= 20 && request < 30) { Console.WriteLine("{0} handled request {1}", this.GetType().Name, request); } else if (successor != null) { successor.HandleRequest(request); } } } }
四、設計模式分析
優點: 1、降低耦合度。它將請求的發送者和接收者解耦。 2、簡化了對象。使得對象不需要知道鏈的結構。 3、增強給對象指派職責的靈活性。通過改變鏈內的成員或者調動它們的次序,允許動態地新增或者刪除責任。 4、增加新的請求處理類很方便。
缺點: 1、不能保證請求一定被接收。 2、系統性能將受到一定影響,而且在進行代碼調試時不太方便,可能會造成循環調用。 3、可能不容易觀察運行時的特征,有礙於除錯
設計模式のChainOfResponsibilityPattern(責任鏈模式)----行為模式