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下的权限算法的实现
Apr 28 PHP
MySQL授权问题总结
May 06 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
php的大小写敏感问题整理
Dec 29 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
php实现微信分享朋友链接功能
Feb 18 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
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
JsDom 编程小结
2011/08/09 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
JavaScript实现烟花绽放动画效果
2020/08/04 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
python实现图片转字符小工具
2019/04/30 Python
简单了解python PEP的一些知识
2019/07/13 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
python爬取代理ip的示例
2020/12/18 Python
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
高三自我鉴定范文
2013/10/19 职场文书
心理健康教育心得体会
2013/12/29 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
外国人来华邀请函
2015/01/31 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
企业宣传语大全
2015/07/13 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书