【PHP设计模式 07_ZeRenLian.php】责任链模式
<?php /** * 【责任链模式】 * 情景设置:根据不同的需求,去找相应级别的责任人解决问题 */ header("Content-type: text/html; charset=utf-8"); /* 面向过程的方式解决这个问题 */ if(isset($_POST['type1']) && !empty($_POST['type1'])){ class Cun{ public function process(){ echo '去村委会,找村长解决问题。'; } } class Zhen{ public function process(){ echo '去镇长办公室,找镇长解决问题。'; } } class Xian{ public function process(){ echo '去县里,找县长解决问题'; } } $type = $_POST['type1']; if($type == 1){ $obj = new Cun(); }elseif($type == 2){ $obj = new Zhen(); }elseif($type == 3){ $obj = new Xian(); }else{ exit('错误的选项'); } echo '(面向过程)'; $obj->process(); } /* 责任链模式 解决这个问题 */ if(isset($_POST['type2']) && !empty($_POST['type2'])){ class CunZ{ protected $power = 1; //假设“村长”的能力级别=1 protected $top = 'Zhenz'; //假设“村长”的上级是“ZhenZ” public function process($lev){ //如果匹配则处理,否则去找上一级 if($lev == $this->power){ echo '去村委会,找村长解决问题。'; }else{ $top = new $this->top; $top->process($lev); } } } class Zhenz{ protected $power = 2; //假设“镇长”的能力级别=2 protected $top = 'XianZ'; //假设“镇长”的上级是“XianZ” public function process($lev){ //如果匹配则处理,否则去找上一级 if($lev == $this->power){ echo '去镇长办公室,找镇长解决问题。'; }else{ $top = new $this->top; $top->process($lev); } } } class Xianz{ protected $power = null; protected $top = null; //假设“县长” 暂无上级 public function process($lev){ //因为没有了上级,所以直接处理 echo '去县里,找县长解决问题'; } } $type = $_POST['type2']; $obj = new CunZ(); echo '(责任链)'; $obj->process($type); } ?> <br><br><br><br> <form action="?" method="post"> 【面向过程】 <select name="type1"> <option value="1">家庭纠纷(找村长)</option> <option value="2">土地赔偿(找镇长)</option> <option value="3">户口问题(找县长)</option> </select> <button type="submit">提交</button> </form> <form action="?" method="post"> 【责任链模式】 <select name="type2"> <option value="1">家庭纠纷(找村长)</option> <option value="2">土地赔偿(找镇长)</option> <option value="3">户口问题(找县长)</option> </select> <button type="submit">提交</button> </form>