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 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
Destoon实现多表查询示例
Aug 21 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 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
用缓存实现静态页面的测试
2006/12/06 PHP
cache_lite试用
2007/02/14 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
中学生自我鉴定
2014/02/04 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
信息合作协议书
2014/10/09 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
安全教育片观后感
2015/06/17 职场文书