裝飾器模式容許咱們根據運行時不一樣的情景動態地爲某個對象調用先後添加不一樣的行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加點辣椒; ?>