<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="教你PHP的责任链编程模式（带示例）" id="card1">
<p> 游客</p><p>
标题:教你PHP的责任链编程模式（带示例）<br/>
正文:<br/>
概述责任链模式是一种对象的行为模式。在责任链模式里，很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求，这使得系统可以在不影响客户端的情况下动态的重新组织和分配责任 责任链模式的定义使多个对象都有机会处理请求，从而避免了请求的发送者和接受者之间耦合关系，将这些对象连成一条链，并沿着这条链传递该请求，直到有对象处理它为止。 责任链模式的优点最为显著的优点就是将请求和处理分开。请求者可以不用知道是谁处理的，处理者可以不用知道请求的全貌，两者解耦，提高系统的灵活性。  责任链模式的缺点一是性能问题，每个请求都是从链头遍历到链尾，特别是在链比较长的时候，性能是一个问题。二是调试不是很方便，特别是链条比较长的，环节比较多的时候，由于采用了类似递归的方式 ，调试的时候逻辑可能比较复杂。 责任链模式涉及到的角色如下：    抽象处理者(Handler)角色：定义出一个处理请求的接口。如果需要，接口可以定义出一个方法以设定和返回对下家的引用。这个角色通常由一个php的抽象类或接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用，抽象方法handleRequest()规范了子类处理请求的操作    具体处理者(ConcreateHandle)角色：具体处理者接到请求后，可以选择将请求处理掉，或者将请求传给下家。由于具体处理者持有对下家的引用，因此，如果需要，具体处理这可以访问下家来看一个PHP的责任链模式编程实例：   &amp;lt;?php      /**    * 抽象处理者角色    * @author wzy    *    */   abstract class Handle   {        /**      * 持有后继的责任对象      *      * @var object      */     protected $successor;        /**      * 示意处理请求的方法，虽然这个示意方法是没有传入参素的      * 但实际是可以传入参数的，根据具体需要来选择是否传递参数      <br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2170&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2170&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2170&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2170&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2170&amp;Page=3">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=2170">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=2170">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>