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递归实现无限分类生成下拉列表的函数
Aug 08 PHP
PHP url 加密解密函数代码
Aug 26 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
php文件缓存类汇总
Nov 21 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
php封装的page分页类完整实例
Oct 18 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 PHP
PHP实现创建一个RPC服务操作示例
Feb 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
js实现进度条的方法
2015/02/13 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
Python发送Email方法实例
2014/08/21 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
婚假请假条格式及范文
2014/04/10 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
销售员岗位职责
2015/02/10 职场文书