您的位置:首页 > 编程语言 > PHP开发

PHP设计模式之装饰者模式

2015-05-10 00:00 1921 查看
定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
Component(被装饰对象基类)
ConcreteComponent(具体被装饰对象)
Decorator(装饰者基类)
ContreteDecorator(具体的装饰者类)
[b][b]示例代码:
[/b][/b]
//被装饰者基类
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;
    }
}

//具体装饰类A
class 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;
    }
}

//具体装饰类B
class 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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息