定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
component(被装饰对象基类)
concretecomponent(具体被装饰对象)
decorator(装饰者基类)
contretedecorator(具体的装饰者类)
示例代码:
//被装饰者基类
interface component
{
public function operation();
}
//装饰者基类
abstract class decorator implements component
{
protected $component;
public function __construct(component $component)
{
$this->component = $component;
}
public function operation()
{
$this->component->operation();
}
}
//具体装饰者类
class concretecomponent implements component
{
public function operation()
{
echo 'do operation'.php_eol;
}
}
//具体装饰类a
class concretedecoratora extends decorator {
public function __construct(component $component) {
parent::__construct($component);
}
public function operation() {
parent::operation();
$this->addedoperationa(); // 新增加的操作
}
public function addedoperationa() {
echo 'add operation a '.php_eol;
}
}
//具体装饰类b
class concretedecoratorb extends decorator {
public function __construct(component $component) {
parent::__construct($component);
}
public function operation() {
parent::operation();
$this->addedoperationb();
}
public function addedoperationb() {
echo 'add operation b '.php_eol;
}
}
class client {
public static function main() {
/*
do operation
add operation a
*/
$decoratora = new concretedecoratora(new concretecomponent());
$decoratora->operation();
/*
do operation
add operation a
add operation b
*/
$decoratorb = new concretedecoratorb($decoratora);
$decoratorb->operation();
}
}
client::main();
评论列表:
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 3天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论
发布于 2天前回复该评论