动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。
attach additional responsibilities to an object dynamically。decorators provide a flexible alternative to subclassing for extending functionality.

装饰模式的结构中包括四个角色。
+ 抽象组件(component):抽象组件是一个抽象类或者接口。抽象组件定义了“被装饰者”需要进行“装饰”的方法。
+ 具体产品(concretecomponent):具体组件是抽象组件的一个子类,具体组件的实例称为“被装饰者”。
+ 装饰(decorator):装饰也是抽象组件的一个子类,但装饰还包含一个抽象组件声明的变量以保存“被装饰者”的引用。装饰可以是抽象类也可以是一个非抽象类,如果是非抽象类,那么该类的实例称作“装饰者”。
+ 具体装饰(concretedecorator):具体装饰是装饰的一个非抽象子类,具体装饰的实例称作“装饰者”。
被装饰者和装饰者是松耦合关系。由于装饰(decorator)仅仅依赖于抽象组件(component),因此具体装饰只知道它要装饰的对象是抽象组件某一个子类的实例,但不需要知道是哪一个具体子类。
装饰模式满足“开-闭原则”。不必修改具体组件,就可以增加新的针对该具体组件的具体装饰。
可以使用多个具体装饰来装饰具体组件的实例。
程序希望动态地增强类的某个对象的功能,而又不影响到该类的其他对象。
采用继承来增强对象功能不利于系统的扩展和维护。
<a href="https://github.com/androidwolf">mygithub</a>