1、对应的设计原则:类应该对扩展开放,对修改关闭。

2、装饰者模式:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。(个人理解:动态的用一个或者多个装饰者装饰对象,且对象与装饰者来源于同一个超类)

3、类图如下:

说明:

装饰者和被装饰对象有相同的超类型。

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

装饰者可以在被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。

对象可以在任何时候被装饰,即在运行时动态地、不限量地用装饰者来装饰对象。

 4、例子

以咖啡为例,我们以饮料为主题,然后在运行时以调料来装饰饮料。

4.1 类图如下:

4.2 代码实现:暂时省略

5、JAVA API中的装饰者模式

 

6、优点

(1)装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态决定“贴上”一个需要的“装饰”,或者除          掉一个不需要的“装饰”。继承关系则不同,继承关系是静态的,它在系统运行前就决定了。

(2)通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

个人理解:动态扩展对象功能,通过不同的装饰类组合创建不同的对象,减少了继承带来的类爆炸。

7、缺点

装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变得很复杂