模板方法模式定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。新的子类在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。常用场景:servlet中doGet和doPost方法调用。
现在有一个场景是去银行办理业务,常见的步骤是先排队取号,然后等待,办理业务,最后对服务进行评价。这样的一个过程可以说是银行的一个模板方法。
采用抽象类
public abstract class BankTemplate {
public void takeNumber(){
System.out.println("取号排队!");
}
public abstract void transact();
public void evaluate(){
System.out.println("反馈评分!");
}
public final void process(){
takeNumber();
this.transact();
evaluate();
}
}
测试类,这里具体业务可以另写一个类,也可以由匿名内部类来实现。下面是代码。
public class Test {
public static void main(String[] args) {
//子类实现(多态的体现)
BankTemplate bankTemplate = new TakeMoney();
bankTemplate.process();
//匿名内部类
BankTemplate bankTemplate1 = new BankTemplate() {
@Override
public void transact() {
System.out.println("存款1000元!");
}
};
bankTemplate1.process();
}
}
class TakeMoney extends BankTemplate{
@Override
public void transact() {
System.out.println("取款500元!");
}
}
最后的结果是:
取号排队!
取款500元!
反馈评分!
取号排队!
存款1000元!
反馈评分!