Inheritance: extends Decorator
コード例 #1
0
ファイル: decorator.php プロジェクト: luisOO/design-patterns
 public static function main()
 {
     $component = new ConcreteComponent();
     $decoratorA = new ConcreteDecoratorA($component);
     $decoratorB = new ConcreteDecoratorB($decoratorA);
     $decoratorA->operate();
     $decoratorB->operate();
 }
コード例 #2
0
ファイル: 0.php プロジェクト: ruyicoder/php
class ConcreteDecoratorA extends Decorator
{
    private $addedState;
    //本类都有的,以区别于ConcreteDecoratorB
    public function operation()
    {
        parent::operation();
        $this->addedState = 'New state';
        var_dump('具体装饰对象A的操作');
    }
}
/*
 * 具体装饰类A
 */
class ConcreteDecoratorB extends Decorator
{
    public function operation()
    {
        parent::operation();
        $this->Addbehavior();
        var_dump('具体装饰对象B的操作');
    }
    public function Addbehavior()
    {
    }
}
//客户端代码
$c = new ConcreteComponent();
$d1 = new ConcreteDecoratorA($c);
$d1 = new ConcreteDecoratorB($d1);
$d1->operation();
コード例 #3
0
ファイル: MyDecorator.php プロジェクト: manachyn/trainings
        $this->_component = $component;
    }
    protected function getComponent()
    {
        return $this->_component;
    }
    public function Operation()
    {
        return $this->getComponent()->Operation();
    }
}
class ConcreteDecoratorA extends Decorator
{
    public function Operation()
    {
        return '<A>' . parent::Operation() . '</A>';
    }
}
class ConcreteDecoratorB extends Decorator
{
    public function Operation()
    {
        return '<B>' . parent::Operation() . '</B>';
    }
}
// Example
$Element = new ConcreteComponent();
$ExtendedElement = new ConcreteDecoratorA($Element);
$SuperExtendedElement = new ConcreteDecoratorB($ExtendedElement);
print $SuperExtendedElement->Operation();
// <B><A>I am component</A></B>
コード例 #4
0
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();
echo '<br>--------<br>';
$decoratorB->operation();