模板方法模式是编程中经常用到的模式,它定义了一个操作的算法骨架,将某些步骤延迟到子类实现。
这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。
核心:处理某个流程的代码都已具备,但其中某个节点的代码暂时不能确定,所以将这个节点的代码
实现转移到子类完成。
例子:模拟一个银行取号业务流程。
/**
* 模擬银行取号排队
*/
public abstract class BankTemplateMethod {
public void takeNumber(){
System.out.println("取号排队");
}
//办理具体业务
public abstract void transact();
public void evaluate(){
System.out.println("反馈评分");
}
/**
* 模板方法,把基本操作組合在一起,防止惡意修改,一般用final修飾
*/
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();
}
}
//具体子类如果有其他业务继续定义子类即可
class DrawMoney extends BankTemplateMethod{
@Override
public void transact() {
System.out.println("取款实现");
}
}
模板方法模式在平时业务中很常用,基于继承的方式(本质上就是多态)使得也比较容易实现。
模板方法有点类似方法回调,子类具体实现的方法就是一个钩子方法。
在实际业务中,当我们要实现一个算法,整体步骤很固定,但某些部分存在变法,那么可以将变化
部分抽象出来,供子类实现。