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 操作excel文件的方法小结
Dec 31 PHP
PHP 反向排序和随机排序代码
Jun 30 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
解析PHP正则提取或替换img标记属性
Jun 26 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
Laravel下生成验证码的类
Nov 15 PHP
微信推送功能实现方式图文详解
Jul 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中GET变量的使用
2006/10/09 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
python获取外网ip地址的方法总结
2015/07/02 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python之pandas用法大全
2018/03/13 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
售后服务经理岗位职责范本
2014/02/22 职场文书
毕业论文评语大全
2014/04/29 职场文书
音乐节策划方案
2014/06/09 职场文书
工商管理自荐书
2014/07/06 职场文书
销售口号霸气押韵
2015/12/24 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
python实现三阶魔方还原的示例代码
2021/04/28 Python