PHP设计模式之装饰模式

装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

PHP设计模式之装饰模式_第1张图片


abstract class Component
{
    public abstract function Operation();
}

class ConcreteComponent extends Component
{
    function Operation()
    {
        echo '具体对象的操作
'
; } } class Decorator extends Component { protected $component; public function SetComponent(Component $component) { $this->component = $component; } public function Operation() { if ($this->component != null){ $this->component->Operation(); } } } class ConcreteDecoratorA extends Decorator { private $addedState; function Operation() { parent::Operation(); $this->addedState = 'New State'; echo '具体装饰对象A的操作'; } } class ConcreteDecoratorB extends Decorator { private $addedState; function Operation() { parent::Operation(); $this->addedBehavior(); echo '具体装饰对象B的操作'; } private function addedBehavior() { } } $c = new ConcreteComponent(); $d1 = new ConcreteDecoratorA(); $d2 = new ConcreteDecoratorB(); $d1->SetComponent($c); $d2->SetComponent($d1); $d1->Operation(); echo '
'
; echo '
'
; $d2->Operation();
  • 因为装饰模式对象作为子对象的包装,所以保持基类中的方法尽可能少是很重要的。如果一个基类具有大量特性,那么装饰对象不得不为他们包装的对象的所有public方法加上委托。

你可能感兴趣的:(深入PHP,大话设计模式)