<?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>