php设计模式 Decorator(装饰模式)

2015-01-24信息快讯网

动态的给一个对象添加一些额外的职责,就扩展功能而言比生成子类方式更为灵活

 
<?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/>"); 
php5.3中连接sqlserver2000的两种方法(com与ODBC)
PHP中函数rand和mt_rand的区别比较
zend framework配置操作数据库实例分析
windows下zendframework项目环境搭建(通过命令行配置)
PHP gbk环境下json_dencode传送来的汉字
PHP去掉从word直接粘贴过来的没有用格式的函数
域名和cookie问题(域名后缀)
记录PHP错误日志 display_errors与log_errors的区别
php在程序中将网页生成word文档并提供下载的代码
Linux下CoreSeek及PHP扩展模块的安装
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
PHP 之Section与Cookie使用总结
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
巧用php中的array_filter()函数去掉多维空值的代码分享
比较discuz和ecshop的截取字符串函数php版
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
php设计模式 DAO(数据访问对象模式)
php设计模式 Delegation(委托模式)
php设计模式 Factory(工厂模式)
php设计模式 Strategy(策略模式)
php设计模式 Command(命令模式)
php设计模式 Composite (组合模式)
php设计模式 Mediator (中介者模式)
PHP array操作10个小技巧分享
php设计模式 Command(命令模式)
php在页面中调用fckeditor编辑器的方法
PHP中遍历stdclass object的实现代码
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
rephactor 优秀的PHP的重构工具
使ecshop模板中可引用常量的实现方法
php自动获取字符串编码函数mb_detect_encoding
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE eval()'d code error
php中在PDO中使用事务(Transaction)
php 数组排序 array_multisort与uasort的区别
©2014-2024 dbsqp.com