[垃圾桶]3.3模板方法模式2

本文移到垃圾桶,参考 3.3 模板方法模式(5.10)

3.3模板方法模式 

2.1.5  模板方法+回调

模板方法模式将整个流程中不变的部分和可变的部分有效分开后(这是前提),模板方法定义执行流程,不变的部分由父类提供(可复用的)代码,可变的部分由子类延迟实现。

如果在分层结构中,Sup所定义的abstract方法和空方法,都属于回调接口。如果处理step2()的方式数以千计,可变的部分由独立的子类延迟实现并非合理的选择。此时,可以使用策略模式(可以将Sup作为策略类,也可以)将Sup作为环境类,而设计函数接口HandleStep2来处理step2(),由应用程序员提供HandleStep2的子类。

package method.templateMethod;
import static tool.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 method.templateMethod
public interface HandleStep2{// Java8中设计成函数接口
    void step2();
}


 

package method.templateMethod
public class Test{     
    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#的程序员处理回调更舒服,可以用λ表达式。

Java 8,也可以用λ表达式了。 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值