天天看點

設計模式-責任鍊模式

 在一些情況下,對一個消息(含事件)的響應和處理需要很多對象來參與,這些對象對消息的處理有前後順序,形成一個處理鍊條,但對象是否真正處理消息有賴于在它之前的對象的處理政策,前一個對象處理後,後一個對象則不需參與處理,這就是責任鍊模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信訪開始進行處理,如果下一級信訪部門無法處理,則交給上一級部門進行處理,這樣一級一級的處理,知道最高信訪部門。這樣所有層級的信訪部門就構成了一個責任鍊。

<code>public</code> <code>abstract</code> <code>class</code> <code>Chain_Successor</code>

<code>{</code>

<code>  </code><code>protected</code> <code>Chain_Successor successor; </code><code>//儲存後繼責任者的引用</code>

<code>  </code><code>/// &lt;summary&gt;</code>

<code>  </code><code>/// 處理需求</code>

<code>  </code><code>/// &lt;/summary&gt;</code>

<code>  </code><code>/// &lt;param name="request"&gt;需要處理的類&lt;/param&gt;</code>

<code>  </code><code>public</code> <code>abstract</code> <code>void</code> <code>HandleReqest(Chain_Request request);</code>

<code>  </code><code>/// 設定後繼責任者</code>

<code>  </code><code>/// &lt;param name="successor"&gt;後繼責任者&lt;/param&gt;</code>

<code>  </code><code>public</code> <code>void</code> <code>SetChain_Successor(Chain_Successor successor)</code>

<code>  </code><code>{</code>

<code>   </code><code>this</code><code>.successor = successor;</code>

<code>  </code><code>}</code>

<code>}</code>

<code>public</code> <code>class</code> <code>Chain_ConcreateHandleA : Chain_Successor</code>

<code>  </code><code>public</code> <code>Chain_ConcreateHandleA()</code>

<code>  </code><code>public</code> <code>override</code> <code>void</code> <code>HandleReqest(Chain_Request request)</code>

<code>   </code><code>//如果自己能處理則處理,否則傳遞給後繼者</code>

<code>   </code><code>if</code><code>(request.Request_Type==1)</code>

<code>   </code><code>{</code>

<code>    </code><code>System.Windows.Forms.MessageBox.Show(</code><code>this</code><code>.ToString()+</code><code>":"</code><code>+request.Request_Parameters);</code>

<code>   </code><code>}</code>

<code>   </code><code>else</code>

<code>    </code><code>if</code><code>(</code><code>this</code><code>.successor!=</code><code>null</code><code>)</code>

<code>                   </code><code>successor.HandleReqest(request);</code>

<code>public</code> <code>class</code> <code>Chain_ConcreateHandleB : Chain_Successor</code>

<code>  </code><code>public</code> <code>Chain_ConcreateHandleB()</code>

<code>   </code><code>if</code><code>(request.Request_Type==2)</code>

<code>     </code><code>successor.HandleReqest(request);</code>

<code>public</code> <code>class</code> <code>Chain_ConcreateHandleC : Chain_Successor</code>

<code>  </code><code>public</code> <code>Chain_ConcreateHandleC()</code>

<code>   </code><code>if</code><code>(request.Request_Type==3)</code>

<code>public</code> <code>class</code> <code>Chain_Request</code>

<code>  </code><code>//下面的兩個參數可更加具體需要進行構造</code>

<code>        </code><code>private</code> <code>int</code> <code>_Request_type;</code>

<code>  </code><code>private</code> <code>string</code> <code>_Request_parameters;</code>

<code>  </code><code>public</code> <code>Chain_Request(</code><code>int</code> <code>Request_type,</code><code>string</code> <code>RequestParameters)</code>

<code>   </code><code>this</code><code>._Request_type = Request_type;</code>

<code>   </code><code>this</code><code>._Request_parameters = RequestParameters;</code>

<code>  </code><code>public</code> <code>int</code> <code>Request_Type</code>

<code>   </code><code>get</code>

<code>    </code><code>return</code> <code>_Request_type;</code>

<code>   </code><code>set</code>

<code>                </code><code>_Request_type = value;</code>

<code>   </code><code>} </code>

<code>  </code><code>public</code> <code>string</code> <code>Request_Parameters</code>

<code>    </code><code>return</code> <code>_Request_parameters;</code>

<code>               </code><code>_Request_parameters = value;</code>

<code>public</code> <code>class</code> <code>Chain_Client</code>

<code>  </code><code>public</code> <code>static</code> <code>void</code> <code>Test()</code>

<code>      </code><code>Chain_Successor firstHandler = </code><code>new</code> <code>Chain_ConcreateHandleA();</code>

<code>   </code><code>  Chain_Successor secondHandler = </code><code>new</code> <code>Chain_ConcreateHandleB();</code>

<code>   </code><code>  Chain_Successor ThirdHandler = </code><code>new</code> <code>Chain_ConcreateHandleC();</code>

<code>   </code><code>  firstHandler.SetChain_Successor(secondHandler);</code>

<code>   </code><code>  secondHandler.SetChain_Successor(ThirdHandler);</code>

<code>      </code><code>firstHandler.HandleReqest(</code><code>new</code> <code>Chain_Request(2,</code><code>"hello,the world!"</code><code>));</code>

  

本文轉自 夢在旅途 部落格園部落格,原文連結:http://www.cnblogs.com/zuowj/p/3504542.html  ,如需轉載請自行聯系原作者

繼續閱讀