装饰器设计模式

什么是装饰器模式

装饰器模式就是对一个已有的结构增加装饰。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

何时使用装饰器

基本说来, 如果想为现有对象增加新功能而不想影响其他对象, 就可以使用装饰器模式.

装饰器类图

装饰器的组成

Component接口:定义一个对象接口,以规范准备接受附加责任的对象。

Decorator接口:装饰器接口

ConcreteComponent :具体组件角色,即将要被装饰增加功能的类

ConcreteDecorator :具体装饰器,向组件添加职责

代码

Component接口

namespace Test;

abstract class Component

{

abstract public function operation();

}

Decorator

namespace Test;

abstract class Decorator extends Component

{

protected $component;

public function __construct(Component $component)

{

$this->component = $component;

}

public function operation()

{

$this->component->operation();

}

abstract public function before();

abstract public function after();

}

ConcreteComponent

namespace Test;

class ConcreteComponent extends Component

{

public function operation()

{

echo "hello world!!!!";

}

}

ConcreteDecoratorA 添加了before和after方法,即在原有操作的基础上之前和之后又添加了职责

namespace Test;

class ConcreteDecoratorA extends Decorator

{

public function __construct(Component $component)

{

parent::__construct($component);

}

public function operation() {

$this->before();

parent::operation();

$this->after();

}

public function before()

{

// TODO: Implement before() method.

echo "before!!!";

}

public function after()

{

// TODO: Implement after() method.

echo "after!!!";

}

}

CLient主要用来实例化装饰器

namespace Test;

class Client

{

/**

*

*/

public static function main() {

$decoratorA = new ConcreteDecoratorA(new ConcreteComponent());

$decoratorA->operation();

$decoratorB=new ConcreteDecoratorA($decoratorA);

$decoratorB->operation();

}

}

调用Clien main()方法结果

before!!!hello world!!!!after!!!before!!!before!!!hello world!!!!after!!!after!!!

装饰者模式 php,PHP设计模式之装饰器模式相关推荐

  1. python修饰器_python设计模式之修饰器模式

    python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...

  2. 设计模式-前摄器模式(Proactor)

    本周要进行boost asio库的学习,在学习之前发现最好需要先了解一下前摄器模式,这样对asio库的理解很有帮助,故写下此文 我之前写的随笔XShell的模拟实现中的链接方式可以说是同步的(服务器阻 ...

  3. java设计模式装饰者模式优点_java设计模式之--装饰者模式

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装 ...

  4. 米线店结账程序 装饰着模式_Head First设计模式之装饰者模式

    一.定义 装饰者模式,英文叫Decorator Pattern,在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 动态将职责附加到 ...

  5. python模式选择符,Python设计模式之修饰器模式

    无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. 如果合理,可以直接将功能添加到对象所属的类(例如:添加一个新方法) 使用组合 使用继承 与继承相比,通常应该优先选择组合,因为继承 ...

  6. python设计模式9-装饰器模式

    1. 装饰器模式(Decorator)介绍 UML类图 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为 ...

  7. 设计模式-09-装饰器模式

    一.装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个 ...

  8. php注册树模式,php基础设计模式大全(注册树模式、工厂模式、单列模式)

    废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧. php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里 ...

  9. 构建器设计模式_创新设计模式:构建器模式

    构建器设计模式 以前我们看过工厂和抽象工厂模式. 这些模式可以达到目的,并且确实有用,但是在某些用例中,我们必须创建一个非常复杂的对象,并且创建它需要不同的步骤,每个步骤都需要不同的操作. 在这种情况 ...

最新文章

  1. AI大神李沐B站走红!连博导们都在追更,还亲自带你逐段读懂论文,网友:带B站研究生吧...
  2. switch里能不能用continue?
  3. spring boot部署war包打包插件配置
  4. java super和this总结
  5. MySQL覆盖索引:直接从索引查询到了数据
  6. python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...
  7. 程序员笔试面试最爱考察的算法,到底怎么搞定?
  8. php加skplayer,WordPress整合ckplayer(最新)
  9. java 工作流 轻量级,java轻量级工作流框架
  10. 你绝对不知道 Vue 也有生老病死
  11. 电源适配器DC插头规格
  12. 文献阅读:利用斯托克斯参量验证光波的偏振态
  13. 安全快报 | 美国国土安全部负责人表示,海事部门缺乏网络安全
  14. 机器学习并没有那么深奥,它很有趣(2)
  15. 硬编码失败问题Codec reported err 0x80000000, actionCode 0, while in state 5
  16. 单光感pid巡线_技术解析——单颜色传感器巡线中的PID控制器
  17. USB摄像头图片采集+QT显示(二)
  18. html5 video speed control插件,谷歌浏览器插件Video Speed Manager 视频速度控制插件
  19. 医疗无菌加工之冷冻干燥 –冻干机搁板温度分布验证的指南规范与工艺建议
  20. Latex中自动引用参考文献的方法,一分钟搞定

热门文章

  1. iOS中UIActionSheet使用详解
  2. LayoutInflater的inflate函数用法详解
  3. java开发编程周末班_今天,Java编程周末提高班(第一期)正式结束
  4. 自从学了这套框架,自动化+性能都解决了
  5. Python实战案例,pyecharts模块,Python实现5G数据
  6. matlab fir工具箱,用MATLAB信號處理工具箱進行FIR濾波器設計的三種方法
  7. JS打印指定区域内容
  8. 重新编号_武汉黄陂公交线路PW、PG、PZ……分不清?别急,就要重新编号啦
  9. java调用exe_要精通Java,先研究它的执行原理
  10. 隔空投送所有人安全吗_Find X2将采用2K+120Hz屏幕,支持65W;安卓将拥有“隔空投送”;“杀毒霸主”Avast被曝偷卖4.35亿用户数据;...