diff --git a/notes/pics/decorator-cost.png b/notes/pics/decorator-cost.png new file mode 100644 index 00000000..e85670ba Binary files /dev/null and b/notes/pics/decorator-cost.png differ diff --git a/notes/设计模式 - 装饰.md b/notes/设计模式 - 装饰.md index cf952924..f26318d0 100644 --- a/notes/设计模式 - 装饰.md +++ b/notes/设计模式 - 装饰.md @@ -14,9 +14,9 @@ 设计不同种类的饮料,饮料可以添加配料,比如可以添加牛奶,并且支持动态添加新配料。每增加一种配料,该饮料的价格就会增加,要求计算一种饮料的价格。 -下图表示在 DarkRoast 饮料上新增新添加 Mocha 配料,之后又添加了 Whip 配料。DarkRoast 被 Mocha 包裹,Mocha 又被 Whip 包裹。它们都继承自相同父类,都有 cost() 方法,外层类的 cost() 方法调用了内层类的 cost() 方法。 +下图对应后面的代码:HouseBlend 饮料先被 Mocha 包裹,Mocha 又被 Milk 包裹。它们都继承自相同父类,都有 cost() 方法,外层类的 cost() 方法调用了内层类的 cost() 方法。 -

+

```java public interface Beverage { diff --git a/tools/diagram/src/decorator-cost.svg b/tools/diagram/src/decorator-cost.svg new file mode 100644 index 00000000..99a06c49 --- /dev/null +++ b/tools/diagram/src/decorator-cost.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + 装饰者:一层套一层,cost() 由外向内调用 + + Milk + + Mocha + + HouseBlend + cost() = 1 + cost() = 1 + 1 + cost() = 1 + 2 + ① Milk.cost() 调用 Mocha.cost() + ② Mocha.cost() 调用 HouseBlend.cost() + ③ HouseBlend 返回 1 + ④ Mocha 返回 1 + 1 = 2 + ⑤ Milk 返回 1 + 2 = 3,输出 3.0 + Milk、Mocha 和 HouseBlend 都实现 Beverage,所以装饰者可以继续被装饰;new Milk(new Mocha(new HouseBlend()))。 +