2.1模板方法模式2
接 package 模板方法模式;import static tips.Print.*;public class Sup2{ private void step1(){ pln("step1"); } //public void step2(){} private void step3(){pln("step3"); } //使用回调 public final void template2(HandleStep2 h){ step1(); h.step2(); step3(); }}
package 模板方法模式;public interface HandleStep2{ void step2();}
package 模板方法模式;public class Test{ public static void test(){ Sup s = new Sub(); s.templateMethod(); s = new Sub2(); s.templateMethod(); } public static void test2(){ Sup2 s = new Sup2(); s.template2(new HandleStep2(){ @Override public void step2(){ System.out.println("step2()"); } }); }}
ps:GoF使用钩子和好莱坞法则介绍本模式,说明他们脑袋里面向过程的流毒尚存。一个简单的东西被他们说得云山雾绕。总之,我刚看5.10时就半天没有看懂。鄙视自己。
使用C#的程序员处理回调更舒服,可以用λ表达式。