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 相关文章推荐
ASP和PHP都是可以删除自身的
Apr 09 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
php绘制一条直线的方法
Jan 24 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
tp5.1 实现setInc字段自动加1
Oct 18 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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获取网页里所有图片并存入数组的方法
2015/04/06 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
yepnope.js 异步加载资源文件
2011/09/08 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
分享python数据统计的一些小技巧
2016/07/21 Python
Python常用算法学习基础教程
2017/04/13 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
Python金融数据可视化汇总
2017/11/17 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
.NET面试题:什么是反射
2016/09/30 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
教师师德考核自我评价
2014/09/13 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
生日赠语
2015/06/23 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python