类应该对扩展开放, 对修改关闭.
所谓装饰者模式, 是指用其他的类来装饰某个类,
装饰者说白了就是使用 has-a 来代替 is-a
咖啡店, 有很多种咖啡, 咖啡里还要增加一些 milk, 面包片啊, 等等. 针对加的东西不同, 计算出来的费用不同, 那么我们需要怎么做呢?
1. 首先创建一个 coffee 基类(有抽象的cost方法)
2. 黑咖啡, 原味咖啡, 等咖啡继承 coffee 基础类, 是 is-a的关系
3. 创建一个装饰基础类, 用来装饰咖啡( 有抽象的cost方法)
3. milk, 面包片等是用来装饰咖啡的, 比如黑咖啡中加入milk, 所以继承装饰基类
比如你计算费用时, 所有装饰者的费用自己就可以调用计算.
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5COkZjMxYzMhZjNwgTMjVjZxUjYzADMiRWZ2QWZjlDZm9CXxEzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL4M3Lc9CX6MHc0RHaiojIsJye.png)