auto commit
This commit is contained in:
parent
96a50aac6c
commit
39ce69bb73
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user