php设计模式 Decorator(装饰模式)_PHP
程序员文章站
2024-02-04 15:00:16
...
复制代码 代码如下:
/**
* 装饰模式
*
* 动态的给一个对象添加一些额外的职责,就扩展功能而言比生成子类方式更为灵活
*/
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("一定要学好装饰模式
");
// --- 以下是使用装饰模式 ----
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("一定要学好装饰模式!
");
/**
* 装饰模式
*
* 动态的给一个对象添加一些额外的职责,就扩展功能而言比生成子类方式更为灵活
*/
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("一定要学好装饰模式
");
// --- 以下是使用装饰模式 ----
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("一定要学好装饰模式!
");
推荐阅读
-
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
-
正则表达式 - 为什么在正则不加模式修正符的时候,PHP去匹配的中文字符会是乱码的
-
设计模式 - 在php项目中 各位兄台是怎么优雅的调用工具类库的呢?
-
php设计模式之单例模式代码,php设计模式_PHP教程
-
head first设计模式 《Head First 设计模式》代码之PHP版面向对象学习第1/2页
-
如何使用动态共享对象的模式来安装PHP_php基础
-
PHP设计模式漫谈之迭代器模式_PHP教程
-
php示例详解Constructor Prototype Pattern 原型模式,prototypepattern_PHP教程
-
PHP设计思想之代理模式与读写分离的实践
-
http - android/iOS客户端与PHP开发的rest api之间的文件上传下载实现模式