天天看点

设计模式-责任链模式

 在一些情况下,对一个消息(含事件)的响应和处理需要很多对象来参与,这些对象对消息的处理有前后顺序,形成一个处理链条,但对象是否真正处理消息有赖于在它之前的对象的处理策略,前一个对象处理后,后一个对象则不需参与处理,这就是责任链模式。现实中有很多类似的场景,比如上访,上访一般是从最基层的信访部门接受信访开始进行处理,如果下一级信访部门无法处理,则交给上一级部门进行处理,这样一级一级的处理,知道最高信访部门。这样所有层级的信访部门就构成了一个责任链。

<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  ,如需转载请自行联系原作者

继续阅读