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实现用户认证及管理完全源码
Mar 11 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
php数据访问之查询关键字
May 09 PHP
php处理json格式数据经典案例总结
May 19 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jquery获取radio值实例
2014/10/16 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
Python实现常见的回文字符串算法
2018/11/14 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
护士进修自我鉴定
2014/02/07 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
python内置模块之上下文管理contextlib
2022/06/14 Python