1. 场景
- 很经典的一个场景
- 咖啡类型 espresso(意大利咖啡),shortblack,LongBlack(美食咖啡),Decaf(无因咖啡)
- 调料 Milk ,Soy(豆浆),Chocolate
- 费用 不同的咖啡价格是不同的,而且有 咖啡+调料的类型组合 每个咖啡,都有自己的单价,咖啡+调料也有自己的单价。
- 要求 扩展咖啡的种类的时候,具有很好的扩展性,改动方便,维护方便。
- 总结:看到需求,首先是问题的抽象能力,将问题抽象出来,这个抽象能力非常重要。
2. 需求抽象出来
> 从上面可以看到增加的 **调料** 或者 咖啡的类型,就会增加继承的类,会形成类爆炸。1.看到每个咖啡,都有自己的cost(花费)和description(描述)可以知道咖啡共有的属性和行为。
2. 看到问题后,手动画图或者用软件画出类图 ,遇到问题,首先是下手,做软件行业,就是要下手设计,大家都能想到的如下类图设计
2.装饰者设计模式
装饰者模式,更像俄罗斯的套娃,一层一层的嵌套
看到类图后你会发现,其实就 当前类A 中 含有A属性。
类图如下:
3. 类图
3.1 类设计图
3.2 类图
注意!!
- drink 是抽象类
- shortblack 就是单品咖啡
- decorator 是一个装饰类,含有一个装饰对象drink
decorator 的cost 方法,进行费用的叠加计算,递归计算价格。
4 代码
后续补充
5.总结
总结:你会发现做开发时间长后,有时候会缺乏设计的思考,一般项目或者产品比较急,或者需求变更过程,最后你会发现,慢慢失去了原来设计的样子,所有当你完成一个产品或者项目的时候,需要经常性的总结和反思。给大家推荐一下,一位大佬的总结:https://mp.weixin.qq.com/s/6TlrB5OTgMFd1Px84KtLog