0
点赞
收藏
分享

微信扫一扫

【设计模式】我终于读懂了装饰者模式。。。

冬冬_79d4 2022-12-24 阅读 111

文章目录

👑星巴克咖啡订单项目(咖啡馆)

👒装饰者模式定义

👞 装饰者模式解决星巴克咖啡订单

在这里插入图片描述

🌂装饰者模式下的订单:2 份巧克力+一份牛奶的 LongBlack

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下面有四个类型的coffee

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

💼下面我们跟着代码debug下去看一下

👜这里我们new 了一个澳式黑咖啡

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

👝下面我们把coffee包装到牛奶中去了

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👛我们进入到cost方法中去

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

👓现在我们往下走

在这里插入图片描述
又把牛奶包装到了巧克力当中去,这个时候就开始套娃了,大家发现没有
在这里插入图片描述

🎣接着我们又进入到了cost方法中去

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

☕️这个其实又变成牛奶的价格加上coffee的价格,这样一直递归下去,getDes方法也是如此

在这里插入图片描述

🍵现在我们如果再加一种coffee(新品种)

在这里插入图片描述

在这里插入图片描述

🍶装饰者模式在JDK 应用的源码分析

在这里插入图片描述

🍼InputStream 是抽象类, 类似我们前面讲的 Drink

在这里插入图片描述

🍺FileInputStream 是 InputStream 子类,类似我们前面的 DeCaf, LongBlack

在这里插入图片描述

🍻 FilterInputStream 是 InputStream 子类:类似我们前面 的 Decorator 修饰者

在这里插入图片描述

🍸DataInputStream 是 FilterInputStream 子类,具体的修饰者,类似前面的 Milk, Soy 等

在这里插入图片描述

🍹FilterInputStream 类 有 protected volatile InputStream in; 即含被装饰者,类似前面的obj

在这里插入图片描述

🍷 分析得出在 jdk 的 io 体系中,就是使用装饰者模式

在这里插入图片描述

举报

相关推荐

0 条评论