浅谈php设计模式之责任链模式

来源:互联网 发布:一年程序员觉得很累 编辑:程序博客网 时间:2024/05/22 03:27

责任链模式

原理:坦白来讲就是说按照不同的等级去处理事情,如果自己处理不了就交给上级去处理。这种处理方式叫做责任链模式。

应用场景:OA管理系统中请假。论坛举报。

<form action='make.php' method='post'>    <select name='lev'>        <option value='1'>脏话</option>        <option value='2'>黄赌毒</option>        <option value='3'>反动国家</option>    </select>    <inout type='submit' value='举报'></form>

make.php

<?php    //版主权限    class admin{        protected $power='1';        protected $top = 'submits';         public function make($lev){            if($lev<=$this->power){                echo '删帖子';            }else{                $topObj = new $this->top;                $topObj->make($lev);            }        }    }    //管理员权限    class submits{        protected $power='3';        protected $top = 'police';         public function make($lev){            if($lev<=$this->power){                echo '禁止用户发言';            }else{                $topObj = new $this->top;                $topObj->make($lev);            }        }    }    //警察权限    //责任链最高层(可以不用判断,责任链模式必须要用到最高一层)    function police{        function make($lev){            echo '教育处理';        }    }    //一般是判断权限再去调用区中的类去处理    //这里的责任链模式    $lev = $_POST['lev'];    $adminObj = new admin();    $adminObj->make($lev);?>

优点:

  1. 在php中不用做判断,这里直接调用最底层就行。
  2. 可以简化对象中的相互连接 。
  3. 可以随时增加新的请求类。

缺点:

  1. 系统优化会受到影响
  2. 代码调试不方便
  3. 可能会造成循环利用

总结:

在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。

职责链模式的主要优点在于可以降低系统的耦合度,简化对象的相互连接,同时增强给对象指派职责的灵活性,增加新的请求处理类也很方便;其主要缺点在于不能保证请求一定被接收,且对于比较长的职责链,请求的处理可能涉及到多个处理对象,系统性能将受到一定影响,而且在进行代码调试时不太方便。

职责链模式适用情况包括:有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定;在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;可动态指定一组对象处理请求。

2 0
原创粉丝点击