装饰者模式

装饰者模式

星巴克咖啡订单项目:

1)咖啡种类/单品咖啡:Espresso(意大利浓咖啡)ShortBlack(浓缩咖啡)LongBlack(美式咖啡)Decaf(无因咖啡)

2)调料:MilkSoy(豆浆)、Chocolate

3)要求在扩展新的咖啡种类的时候,具有良好的扩展性、改动方便、维护方便。

4)使用OO(面向对象)的方法来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以点单品咖啡+调料组合。

方案一 较差的传统方案

 

 

这种解决方案会造成类爆炸

方案二 对方案一进行改进

 

 

前面分析到方案一因为咖啡单品+调料组合会造成类爆炸,因此可以做改进,将调料内置到Drink类中,这样就不会造成类的数量过多。从而提高了代码的可维护性。

说明:milk,soy.chocolate可以设计为boolean类型,表示是否需要添加相应的调料。

方案二问题分析:

  1. 方案二可以控制类的数量,不至于造成类的数量过多。
  2. 在增加或者删除调料类的时候,代码的维护量很大(因为都要在同一个Drink类中进行修改)
  3. 考虑到用户可以添加多份调料的时候,可以将hasMilk 返回一个对应的int 类型
  4. 所以我们考虑使用装饰者模式

装饰者模式定义

 

 

 

 

 

 

代码演示:

  

 

posted on   ~码铃薯~  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示