php设计模式 Decorator(装饰模式)


Posted in PHP onJune 26, 2011
<?php 
/** 
* 装饰模式 
* 
* 动态的给一个对象添加一些额外的职责,就扩展功能而言比生成子类方式更为灵活 
*/ 
header("Content-type:text/html;charset=utf-8"); 
abstract class MessageBoardHandler 
{ 
public function __construct(){} 
abstract public function filter($msg); 
} class MessageBoard extends MessageBoardHandler 
{ 
public function filter($msg) 
{ 
return "处理留言板上的内容|".$msg; 
} 
} 
$obj = new MessageBoard(); 
echo $obj->filter("一定要学好装饰模式<br/>"); 
// --- 以下是使用装饰模式 ---- 
class MessageBoardDecorator extends MessageBoardHandler 
{ 
private $_handler = null; 
public function __construct($handler) 
{ 
parent::__construct(); 
$this->_handler = $handler; 
} 
public function filter($msg) 
{ 
return $this->_handler->filter($msg); 
} 
} 
// 过滤html 
class HtmlFilter extends MessageBoardDecorator 
{ 
public function __construct($handler) 
{ 
parent::__construct($handler); 
} 
public function filter($msg) 
{ 
return "过滤掉HTML标签|".parent::filter($msg);; // 过滤掉HTML标签的处理 这时只是加个文字 没有进行处理 
} 
} 
// 过滤敏感词 
class SensitiveFilter extends MessageBoardDecorator 
{ 
public function __construct($handler) 
{ 
parent::__construct($handler); 
} 
public function filter($msg) 
{ 
return "过滤掉敏感词|".parent::filter($msg); // 过滤掉敏感词的处理 这时只是加个文字 没有进行处理 
} 
} 
$obj = new HtmlFilter(new SensitiveFilter(new MessageBoard())); 
echo $obj->filter("一定要学好装饰模式!<br/>");
PHP 相关文章推荐
php面向对象全攻略 (五) 封装性
Sep 30 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
ThinkPHP CURD方法之limit方法详解
Jun 18 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php超快高效率统计大文件行数
Jul 05 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
php设计模式 Delegation(委托模式)
Jun 26 #PHP
php设计模式 Facade(外观模式)
Jun 26 #PHP
php设计模式 Factory(工厂模式)
Jun 26 #PHP
php设计模式 Interpreter(解释器模式)
Jun 26 #PHP
php设计模式 Strategy(策略模式)
Jun 26 #PHP
php设计模式 Observer(观察者模式)
Jun 26 #PHP
php设计模式 Singleton(单例模式)
Jun 26 #PHP
You might like
php&amp;java(三)
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
prototype 学习笔记整理
2009/07/17 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
python插入数据到列表的方法
2015/04/30 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
简单谈谈python基本数据类型
2018/09/26 Python
详解django中Template语言
2020/02/22 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
护士求职信范文
2014/05/24 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
就业意向协议书
2015/01/29 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
首次购房证明
2015/06/19 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书