【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>
【PHP设计模式 07_ZeRenLian.php】责任链模式的更多相关文章
- Python使用设计模式中的责任链模式与迭代器模式的示例
Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...
- Java设计模式学习记录-责任链模式
前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...
- 《java设计模式》之责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击
- [设计模式] javascript 之 责任链模式
责任链模式:定义 责任链接模式又称职责链模式,是一种对象的行为模式:它是一种链式结构,每个节点都有可能两种操作,要么处理该请求停止该请求操作,要么把请求转发到下一个节点,让下一个节点来处理请求:该模式 ...
- Java设计模式系列之责任链模式
责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道 ...
- 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)
参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...
- Java描述设计模式(15):责任链模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...
- Java设计模式13:责任链模式
前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时间去提升自己的技术能力.技术视野,所以开一个系列文章,标题就轻松一点叫做最 ...
- 《JAVA设计模式》之责任链模式(Chain of Responsibility)
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
随机推荐
- webconfig和appconfig中出现特殊字符如何处理
在配置文件出现特殊字符&的字符串(如:abce&efg),就会报错.错误如下: 如何处理呢? config文件的本质是xml,所以必须符合xml的规范我们需要这么处理: abce&am ...
- Redis 安全性设置
redis安装好后,默认情况下登陆客户端和使用命令操作时不需要密码的.某些情况下,为了安全起见,我们可以设置在客户端连接后进行任何操作之前都要进行密码验证. 我这边是安装的window系统,修改red ...
- jiffies和HZ
全局变量jiffies用来记录自系统启动以来产生的节拍的总数.启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值.一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的 ...
- 【转】解决:fatal error C1083: 无法打开预编译头文件
http://blog.csdn.net/aafengyuan/article/details/7988584 是这样的,我创建了一个空项目,并通过"项目属性>C/C++>预编译 ...
- Java基础之集合框架——在文件中存储地图(TryPhoneBook2)
控制台程序. import java.io.*; public class Person implements Comparable<Person>, Serializable { // ...
- Java基础之写文件——将多个字符串写入到文件中(WriteProverbs)
控制台程序,将一系列有用的格言写入到文件中. 本例使用通道把不同长度的字符串写入到文件中,为了方便从文件中恢复字符串,将每个字符串的长度写入到文件中紧靠字符串本身前面的位置,这可以告知在读取字符串之前 ...
- (Builder)创建者模式
定义: 建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示. 适用性: 当流程算法可以固定几个步骤,步骤的算法步骤执行顺序固定,且制造的产品可以唯一确定,这时使用创建 ...
- System.Windows.Forms.Timer与System.Timers.Timer的区别(zz)
.NET Framework里面提供了三种Timer: System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer VS ...
- G面经prepare: Pattern Match
设定一个pattern 把 'internationalization' 变成 'i18n', 比如word是house,pattern可以是h3e, 3se, 5, 1o1s1等, 给pattern ...
- smarty -- foreach用法
{foreach},{foreachelse} 用于像访问序数数组一样访问关联数组 {foreach},{foreachelse} {foreach} is used to loop over an ...