👝下面我们把coffee包装到牛奶中去了
成为了牛奶的obj
👛我们进入到cost方法中去
这里的getPrice就是自己的价格,然后加上obj的价格
描述也是自己的描述加上obj的描述
👓现在我们往下走
又把牛奶包装到了巧克力当中去,这个时候就开始套娃了,大家发现没有
🎣接着我们又进入到了cost方法中去
发现先加自己的价格
然后进入obj的计算价格中去
☕️这个其实又变成牛奶的价格加上coffee的价格,这样一直递归下去,getDes方法也是如此
🍵现在我们如果再加一种coffee(新品种)
只需要继承我们的Coffee类,然后又开始无限套娃
这,就是装饰者模式
🍶装饰者模式在JDK 应用的源码分析
🍼InputStream 是抽象类, 类似我们前面讲的 Drink
🍺FileInputStream 是 InputStream 子类,类似我们前面的 DeCaf, LongBlack
🍻 FilterInputStream 是 InputStream 子类:类似我们前面 的 Decorator 修饰者
🍸DataInputStream 是 FilterInputStream 子类,具体的修饰者,类似前面的 Milk, Soy 等
🍹FilterInputStream 类 有 protected volatile InputStream in; 即含被装饰者,类似前面的obj
🍷 分析得出在 jdk 的 io 体系中,就是使用装饰者模式
资料参考:https://www.bilibili.com/video/BV1G4411c7N4
代码地址:https://gitee.com/WangFuGui-Ma/design-pattern/tree/master/design