装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
装饰模式是为已有功能动态的添加更多功能的一种方式。当系统需要新功能时,向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。
<?php
//Component是定义一个对象接口,可以给这些对象动态的添加职责
abstract class Component {
public abstract function operation();
}
class ConcreteComponent extends Component {
public function operation() {
echo '具体对象的操作:<br/>';
}
}
class Decorator extends Component {
public $component;
public function __construct($component) {
$this->component = $component;
}
public function operation() {
$this->component->operation();
}
}
class DecoratorA extends Decorator {
public function operation() {
parent::operation();
echo 'A<br/>';
}
}
class DecoratorB extends Decorator {
public function operation() {
parent::operation();
echo 'B<br/>';
}
}
class DecoratorC extends Decorator {
public function operation() {
parent::operation();
echo 'C<br/>';
}
}
/*
* 输出结果:
具体对象的操作:
A
B
C
*/
$component = new ConcreteComponent();
$a = new DecoratorA($component);
$b = new DecoratorB($a);
$c = new DecoratorC($b);
$c->operation();