找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1642|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2617

主题

2617

帖子

7789

积分

论坛元老

Rank: 8Rank: 8

积分
7789
跳转到指定楼层
楼主
发表于 2018-2-14 05:46:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

            定义:
装饰者模式就是不修改原类代码和继承的情况下动态扩展类的功能。传统的编程模式都是子类继承父类实现方法重载,使用装饰器模式,只需添加一个新的装饰器对象,更加灵活,避免类数量和层次过多。
角色:
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:peration();
    $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:peration();
    $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开发模式(简写版)
  • php设计模式 Composite (组合模式)
  • php设计模式 Decorator(装饰模式)
  • PHP设计模式之装饰者模式
  • PHP面向对象学习笔记之二 生成对象的设计模式
  • PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
  • PHP、Python和Javascript的装饰器模式对比
  • 学习php设计模式 php实现装饰器模式(decorator)
  • 深入php面向对象、模式与实践
  • php面向对象值单例模式
  • PHP面向对象程序设计组合模式与装饰模式详解
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端