装饰器模式容许咱们根据运行时不一样的情景动态地为某个对象调用先后添加不一样的行php
<?php 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 ConcreteDecoratorA extends Decorator { // 具体装饰类A public function __construct(Component $component) { parent::__construct($component); } public function operation() { parent::operation(); // 调用装饰类的操做 $this->addedOperationA(); // 新增长的操做 } public function addedOperationA() {echo 'A加点酱油;';} } class ConcreteDecoratorB extends Decorator { // 具体装饰类B public function __construct(Component $component) { parent::__construct($component); } public function operation() { parent::operation(); $this->addedOperationB(); } public function addedOperationB() {echo "B加点辣椒;";} } class ConcreteComponent implements Component{ //具体组件类 public function operation() {} } // clients $component = new ConcreteComponent(); $decoratorA = new ConcreteDecoratorA($component); $decoratorB = new ConcreteDecoratorB($decoratorA); $decoratorA->operation();//输出:A加点酱油; echo '<br>--------<br>'; $decoratorB->operation();//输出:A加点酱油;B加点辣椒; ?>