核心:处理代码步骤中定义好,具体实现延迟到子类中定义
什么时候使用:实现一个算法时,整体步骤很固定,但是某些部分易变,但是易变的可以抽象出来,使子类实现
场景:数据库访问封装;Junit单元测试;hibernate中的模板;spring jdbc template
BankTemplateMethod.java
public abstract class BankTemplateMethod {
//具体方法
public void takeNumber(){
System.out.println("取号排队");
}
public abstract void transact(); //办理具体的业务 //钩子方法
public void evaluate(){
System.out.println("反馈评分");
}
public final void process(){ //模板方法!!!
this.takeNumber();
this.transact();
this.evaluate();
}
}
测试
public class Client {
public static void main(String[] args) {
BankTemplateMethod btm = new DrawMoney();
btm.process();
//采用匿名内部类
BankTemplateMethod btm2 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要存钱!");
}
};
btm2.process();
BankTemplateMethod btm3 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要理财!我这里有2000万韩币");
}
};
btm3.process();
}
}
class DrawMoney extends BankTemplateMethod {
@Override
public void transact() {
System.out.println("我要取款!!!");
}
}