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 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
PHP写日志的实现方法
Nov 05 PHP
php中session与cookie的比较
Jan 27 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 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 启动报错如何解决
2014/01/17 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
js微信分享实现代码
2020/10/11 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python中logging模块的用法实例
2014/09/29 Python
简单了解什么是神经网络
2017/12/23 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
《云雀的心愿》教学反思
2014/02/25 职场文书
留学经费担保书
2014/05/12 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
工作收入住址证明
2014/10/28 职场文书
2014年电工工作总结
2014/11/20 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
节约用电通知
2015/04/25 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书