
正文
【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>







