1 /**
2 * 封装算法
3 * 模板方法模式:
4 * 在一个方法中定义一个算法骨架,而将一些步骤延迟到子类中。模板方法使得子类
5 * 可以在不改变算法结构的情况下,重新定义算法中的某些步骤
6 */
7 abstract class AbstractClass{
8
9 final void templateMethod(){
10 primitiveOperation1();
11 primitiveOperation2();
12 concreteOperarion();
13 hook();
14 }
15
16 abstract void primitiveOperation1();//由具体的子类实现
17
18 abstract void primitiveOperation2();
19
20 final void concreteOperation(){ // 子类无法覆盖,被模板方法直接使用或被子类使用
21
22 }
23
24 void hook(){} // 由子类决定要不要覆盖
25 }
26 /**
27 * 好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你
28 */