php设计模式 Chain Of Responsibility (职责链模式)


Posted in PHP onJune 26, 2011
<?php 
/** 
* 职责链模式 
* 
* 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 
* 
*/ 
abstract class Handler 
{ 
protected $_handler = null; 
public function setSuccessor($handler) 
{ 
$this->_handler = $handler; 
} 
abstract function handleRequest($request); 
} 
class ConcreteHandlerZero extends Handler 
{ 
public function handleRequest($request) 
{ 
if($request == 0) 
{ 
echo "0<br/>"; 
} else { 
$this->_handler->handleRequest($request); 
} 
} 
} 
class ConcreteHandlerOdd extends Handler 
{ 
public function handleRequest($request) 
{ 
if($request % 2) 
{ 
echo $request." is odd<br/>"; 
} else { 
$this->_handler->handleRequest($request); 
} 
} 
} 
class ConcreteHandlerEven extends Handler 
{ 
public function handleRequest($request) 
{ 
if(!($request % 2)) 
{ 
echo $request." is even<br/>"; 
} else { 
$this->_handler->handleRequest($request); 
} 
} 
} 
// 实例一下 
$objZeroHander = new ConcreteHandlerZero(); 
$objEvenHander = new ConcreteHandlerEven(); 
$objOddHander = new ConcreteHandlerOdd(); 
$objZeroHander->setSuccessor($objEvenHander); 
$objEvenHander->setSuccessor($objOddHander); 
foreach(array(2,3,4,5,0) as $row) 
{ 
$objZeroHander->handleRequest($row); 
}
PHP 相关文章推荐
PHP.MVC的模板标签系统(五)
Sep 05 PHP
如何使用PHP往windows中添加用户
Dec 06 PHP
php中计算时间差的几种方法
Dec 31 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
php一次性删除前台checkbox多选内容的方法
Sep 22 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
May 04 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
PHP7中I/O模型内核剖析详解
Apr 14 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 #PHP
php设计模式 Mediator (中介者模式)
Jun 26 #PHP
php设计模式 Prototype (原型模式)代码
Jun 26 #PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 #PHP
session在PHP大型web应用中的使用
Jun 25 #PHP
php URL跳转代码 减少外链
Jun 25 #PHP
php session安全问题分析
Jun 24 #PHP
You might like
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
python 获取et和excel的版本号
2009/04/09 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
使用Python的turtle模块画国旗
2019/09/24 Python
Pycharm小白级简单使用教程
2020/01/08 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
《曹刿论战》教学反思
2014/03/02 职场文书
贷款担保申请书
2014/05/20 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
小学校本教研总结
2015/08/13 职场文书
解除合同协议书范本
2016/03/21 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android