i3geek.com
闫庚哲的个人博客

Java设计模式——装饰模式

动机

对客户透明的方式动态地给一个对象附加上更多的责任(行为),换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。这就是装饰模式的模式动机。

定义

动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。

功能

装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。

特点:装饰者必须实现被装饰者接口,从而对用户透明,完全替代被装饰类。

实现

../_images/Decorator.jpg

  • Component: 抽象构件
  • ConcreteComponent: 具体构件(被装饰者)
  • Decorator: 抽象装饰类
  • ConcreteDecorator: 具体装饰类(用来包装的装饰者)

时序图:

../_images/seq_Decorator.jpg

注意:

1. 装饰者和被装饰者有相同的接口

2. 可以用一个或多个装饰者包装一个对象

3. 对象可以在任何时候被装饰,可以动态的、不限量的装饰

应用

在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。可以动态的增加或撤销功能。

实现源代码:https://github.com/yangengzhe/coding-guide_i3geek/tree/master/docs/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F

赞(0)
未经允许不得转载:爱上极客 » Java设计模式——装饰模式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址