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 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
用PHP4访问Oracle815
Oct 09 PHP
PHP 文件类型判断代码
Mar 13 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
php集成开发环境详解
Sep 24 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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实现统计在线人数功能示例
2016/10/15 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
学前教育毕业生自荐信
2013/10/29 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
关于元旦的广播稿
2014/02/16 职场文书
推广普通话标语
2014/06/27 职场文书
市级三好学生评语
2014/12/29 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
python 如何做一个识别率百分百的OCR
2021/05/29 Python
Python极值整数的边界探讨分析
2021/09/15 Python
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL