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调用三种数据库的方法(1)
Oct 09 PHP
php 魔术函数使用说明
Feb 21 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
php采集时被封ip的解决方法
Aug 29 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python实现哈希表
2014/02/07 Python
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
物业保安主管岗位职责
2013/12/25 职场文书
表决心的诗句大全
2014/03/11 职场文书
个人投资计划书
2014/05/01 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
放射科岗位职责
2015/02/14 职场文书
办公室管理规章制度
2015/08/04 职场文书