装饰模式:在不必改变原类文件和使用继承的情况下,动态地给对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
Component是定义一个对象接口,可以动态的给对象添加职责、属性。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,继承了Component,从外部来拓展Component类的功能。ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。
是一个抽象类,主要是提供被实现的接口,可以让实现类动态的添加职责
定义了一个具体对象,也可以给对象添加一些属性、方法。
拓展Componet类的功能。
具体的装饰对象,继承了Componet,起到给Componet添加职责的功能。
装饰模式的使用场景:
1. 需要扩展一个类的功能,或给一个类添加附加职责。
2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
3. 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
4. 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
装饰模式的优点:把类中的装饰功能从类中移除出去,这样可以简化原有的类。而且可以去除相关类中的重复装饰逻辑。
装饰模式的缺点:装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。
ConcreteComponentConcreteComponent