diff --git a/notes/设计模式.md b/notes/设计模式.md index 93703a6b..f4216e01 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -1042,27 +1042,29 @@ gobble! **2. 模式类图** -模板方法 templateMethod() 定义了算法的骨架,确定了 primitiveOperation1() 和 primitiveOperation2() 方法执行的顺序,而 primitiveOperation1() 和 primitiveOperation2() 让子类去具体实现。 +模板方法 templateMethod() 定义了算法的骨架,确定了 primitiveOperation1() 和 primitiveOperation2() 方法执行的顺序,而 primitiveOperation1() 和 primitiveOperation2() 让子类去实现。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//ed62f400-192c-4185-899b-187958201f0c.jpg) **3. 问题描述** -冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样。 +冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。 ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//d8f873fc-00bc-41ee-a87c-c1b4c0172844.png) **4. 解决方案类图** +其中 prepareRecipe() 方法就是模板方法,它确定了其它四个方法的具体执行步骤。其中 brew() 和 addCondiments() 方法在子类中实现。 + ![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//aa20c123-b6b5-432a-83d3-45dc39172192.jpg) **5. 设计原则** -**好莱坞原则**:别调用(打电话给)我们,我们会调用(打电话给)你。这一原则可以防止依赖腐败,即防止高层组件依赖底层组件,底层组件又依赖高层组件。该原则在模板方法的体现为,只有父类会调用子类,子类不会调用父类。 +**好莱坞原则**:别调用(打电话给)我们,我们会调用(打电话给)你。这一原则可以防止依赖腐败,即防止高层组件依赖低层组件,低层组件又依赖高层组件。该原则在模板方法的体现为,只有父类会调用子类,子类不会调用父类。 **6. 钩子** -钩子(hock):某些步骤在不同实现中可有可无,可以先定义一个什么都不做的方法,把它加到模板方法 templteMethod() 中,如果子类需要它就覆盖默认实现并加上自己的实现。 +钩子(hock):某些步骤在不同实现中可有可无,可以先定义一个什么都不做的方法,把它加到模板方法中,如果子类需要它就覆盖默认实现并加上自己的实现。 **7. 代码实现** @@ -1089,6 +1091,7 @@ public abstract class CaffeineBeverage { } } ``` + ```java public class Coffee extends CaffeineBeverage{ @Override @@ -1102,6 +1105,7 @@ public class Coffee extends CaffeineBeverage{ } } ``` + ```java public class Tea extends CaffeineBeverage{ @Override @@ -1115,6 +1119,7 @@ public class Tea extends CaffeineBeverage{ } } ``` + ```java public class CaffeineBeverageTestDrive { public static void main(String[] args) {