diff --git a/notes/pics/template-recipe.png b/notes/pics/template-recipe.png new file mode 100644 index 00000000..8ccd74ed Binary files /dev/null and b/notes/pics/template-recipe.png differ diff --git a/notes/设计模式 - 模板方法.md b/notes/设计模式 - 模板方法.md index a6eddea4..3bfd0fdd 100644 --- a/notes/设计模式 - 模板方法.md +++ b/notes/设计模式 - 模板方法.md @@ -14,7 +14,7 @@ 冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。 -

+

```java public abstract class CaffeineBeverage { diff --git a/tools/diagram/src/template-recipe.svg b/tools/diagram/src/template-recipe.svg new file mode 100644 index 00000000..ed04f7e2 --- /dev/null +++ b/tools/diagram/src/template-recipe.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + 模板方法:流程固定在父类,变化的步骤交给子类 + CaffeineBeverage.prepareRecipe() + + boilWater() + + brew() + + + + Coffee.brew + + Tea.brew + + pourInCup() + + + addCondiments() + + + + Coffee.addCondiments + + Tea.addCondiments + 咖啡 + 茶 + 灰色步骤在父类中实现,所有饮料共用;淡紫色是抽象方法,由子类实现。prepareRecipe 是 final 的,子类不能改变步骤的顺序。 +