装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
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; }} //具体装饰类aclass 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; }} //具体装饰类bclass 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();
