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连接access数据库
Mar 27 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
组合算法的PHP解答方法
Feb 04 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
php简单的上传类分享
May 15 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
php微信公众号开发之快递查询
Oct 20 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 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
DC动漫人物排行
2020/03/03 欧美动漫
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
微信小程序入门教程
2016/11/18 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
对于Python中线程问题的简单讲解
2015/04/03 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
Python实现Linux中的du命令
2017/06/12 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
python中的数据结构比较
2019/05/13 Python
python求质数列表的例子
2019/11/24 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
python离线安装外部依赖包的实现
2020/02/13 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
酒店人事专员岗位职责
2013/12/19 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
廉洁校园实施方案
2014/05/25 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
七一讲话心得体会
2014/09/05 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
售房协议书范本2014
2014/10/23 职场文书
军训个人总结
2015/03/03 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
Go Plugins插件的实现方式
2021/08/07 Golang
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers