前排附demo地址:https://github.com/3KK3/Decorator
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
装饰模式.png
- Component 是定义一个对象接口,可以给这些对象动态的添加职责。
- Concrete Component 是定义一个具体对象,也可以给这个具体对象添加一些职责。
- Decorator 是装饰抽象类,集成自Component类,从外类来拓展Component类的功能,但对于Component类来说,是无需知道Decarotor的存在的。
- Concrete Decorator就是具体的装饰对象,起到给Component添加职责的功能。
装饰模式是利用SetComponent来对对象进行包装。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。
注意:
如果只有一个Concrete Component类,而没有抽象的Component类,那么Decorator类可以是Concrete Component的一个子类。同理,如果只有一个Concrete Decorator类,那么就没有必要建立一个单独的Decorator类,可以把Decorator类和ConcreteDecorat类合并成一个类。
装饰模式是为已有功能动态的添加更多功能的一种方式。它把每个要装饰的功能放在单独的类中,并让这个类包装他所要装饰的对象。因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择的、按顺序的使用装饰功能来包装对象。