1 装饰器模式(Decorator)能够在运行时动态地为原始对象增加一些额外的功能,使其变得更加强大
2 装饰器 和 被装饰的类 实现了 相同的接口,构造装饰器实例时,将被装饰的实例传入装饰器,然后在调用方法的时候,增强功能,再调用 被装饰者的函数
public interface Showable{public void show(); //增强的函数}public class Girl implements Showable{...show(){...};}public class Decorator implements Showable{Showable showable;public Decorator(Showable showable){...}...show(){ ...;showable.show();..;}}
3 在装饰器内 写死了 增强的操作, 不利于扩展 ,可以对其进行抽象
public abstract class Decorator implements Showable{protected Showable showable;public Decorator(Showable showable){...}public void show(){showable.show();}}
4 随后 构建 不同的 Decorator ,并覆写 show()
public class DecoratorOne extends Decorator(){...;...show(){...};}
5 抽象后,还可以将多个装饰器 组合起来,可以增强所有的方法
Showable a = new DecoratorTwo(new DecoratorOne(Girl))
6 这种类似于套娃的结构,在Java的io流中可以见到
new BufferedInputStream(new ZipInputStream(new FileInputStream(...)))

7 客户需求是多变且无法预估的,要实现不同功能的自由组合,以“继承”的方式来完成是不现实的,会造成子类泛滥,维护或扩展起来举步维艰
8 而装饰器模式可以将不同功能的单个模块规划至不同的装饰器类中,各装饰器类独立自主,各司其职。客户端可以根据自己的需求自由搭配各种装饰器,每加一层装饰就会有新的特性体现出来,巧妙的设计让功能模块层层叠加,装饰之上套装饰,最终使原始对象的特性动态地得到增强。
