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以及MYSQL日期比较方法
Nov 29 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php有道翻译api调用方法实例
Dec 22 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
详解php伪造Referer请求反盗链资源
Jan 24 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 intval的测试代码发现问题
2008/07/27 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
JS实现按钮颜色切换效果
2020/09/05 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
PyCharm 常用快捷键和设置方法
2017/12/20 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
Python简单实现区域生长方式
2020/01/16 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
为什么相对PHP黑python的更少
2020/06/21 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
出国签证在职证明范本
2014/11/24 职场文书
2015年化验员工作总结
2015/04/10 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
使用Apache Camel表达REST服务的方法
2022/06/10 Servers