文章出處
文章列表
在一些情況下,對一個消息(含事件)的響應和處理需要很多對象來參與,這些對象對消息的處理有前后順序,形成一個處理鏈條,但對象是否真正處理消息有賴于在它之前的對象的處理策略,前一個對象處理后,后一個對象則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信訪開始進行處理,如果下一級信訪部門無法處理,則交給上一級部門進行處理,這樣一級一級的處理,知道最高信訪部門。這樣所有層級的信訪部門就構成了一個責任鏈。
public abstract class Chain_Successor { protected Chain_Successor successor; //保存后繼責任者的引用 /// <summary> /// 處理需求 /// </summary> /// <param name="request">需要處理的類</param> public abstract void HandleReqest(Chain_Request request); /// <summary> /// 設置后繼責任者 /// </summary> /// <param name="successor">后繼責任者</param> public void SetChain_Successor(Chain_Successor successor) { this.successor = successor; } } public class Chain_ConcreateHandleA : Chain_Successor { public Chain_ConcreateHandleA() { } public override void HandleReqest(Chain_Request request) { //如果自己能處理則處理,否則傳遞給后繼者 if(request.Request_Type==1) { System.Windows.Forms.MessageBox.Show(this.ToString()+":"+request.Request_Parameters); } else { if(this.successor!=null) successor.HandleReqest(request); } } } public class Chain_ConcreateHandleB : Chain_Successor { public Chain_ConcreateHandleB() { } public override void HandleReqest(Chain_Request request) { //如果自己能處理則處理,否則傳遞給后繼者 if(request.Request_Type==2) { System.Windows.Forms.MessageBox.Show(this.ToString()+":"+request.Request_Parameters); } else { if(this.successor!=null) successor.HandleReqest(request); } } } public class Chain_ConcreateHandleC : Chain_Successor { public Chain_ConcreateHandleC() { } public override void HandleReqest(Chain_Request request) { //如果自己能處理則處理,否則傳遞給后繼者 if(request.Request_Type==3) { System.Windows.Forms.MessageBox.Show(this.ToString()+":"+request.Request_Parameters); } else { if(this.successor!=null) successor.HandleReqest(request); } } } public class Chain_Request { //下面的兩個參數可更加具體需要進行構造 private int _Request_type; private string _Request_parameters; public Chain_Request(int Request_type,string RequestParameters) { this._Request_type = Request_type; this._Request_parameters = RequestParameters; } public int Request_Type { get { return _Request_type; } set { _Request_type = value; } } public string Request_Parameters { get { return _Request_parameters; } set { _Request_parameters = value; } } } public class Chain_Client { public static void Test() { Chain_Successor firstHandler = new Chain_ConcreateHandleA(); Chain_Successor secondHandler = new Chain_ConcreateHandleB(); Chain_Successor ThirdHandler = new Chain_ConcreateHandleC(); firstHandler.SetChain_Successor(secondHandler); secondHandler.SetChain_Successor(ThirdHandler); firstHandler.HandleReqest(new Chain_Request(2,"hello,the world!")); } }
文章列表
全站熱搜