PHP设计模式之装饰者模式代码实例

定义:

装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。

角色:

Component(被装饰对象基类)
ConcreteComponent(具体被装饰对象)
Decorator(装饰者基类)
ContreteDecorator(具体的装饰者类)

示例代码:

  //被装饰者基类  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();  

PHP设计模式之装饰者模式代码实例

郑重声明:本网站发布的内容(图片、视频和文字)以及用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服

发表评论

登录后才能评论