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的explode和implode的使用说明
Jul 17 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
ThinkPHP添加更新标签的方法
Dec 05 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
CI框架简单分页类用法示例
Jun 06 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 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
一个odbc连mssql分页的类
2006/10/09 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
js监听键盘事件示例代码
2013/07/26 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
python实现人脸识别代码
2017/11/08 Python
TensorFlow变量管理详解
2018/03/10 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python实现对输入的密文加密
2019/03/20 Python
vue常用指令代码实例总结
2020/03/16 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
幼儿园长自我鉴定
2013/10/17 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
2015年征兵工作总结
2015/07/23 职场文书
KTV员工管理制度
2015/08/06 职场文书
安全生产协议书
2016/03/22 职场文书
详解Python牛顿插值法
2021/05/11 Python
redis实现排行榜功能
2021/05/24 Redis