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

5年以前  |  阅读数:1077 次  |  编程语言: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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例