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编程网上资源导航
Oct 09 PHP
oracle资料库函式库
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
php 将excel导入mysql
Nov 09 PHP
php 常用类整理
Dec 23 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
php数据序列化测试实例详解
Aug 12 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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 之入门篇
2006/12/04 PHP
php文件操作实例代码
2012/05/10 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
python随机生成指定长度密码的方法
2015/04/04 Python
python监控文件或目录变化
2016/06/07 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
Final类有什么特点
2012/04/25 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
大学生团支书竞选稿
2015/11/21 职场文书