模板方法模式:模板方法模式是编程中经常用到的模式,它定义了一个操 作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在 不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。
核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不 能确定。因此采用工厂方法模式将这个节点的代码实现转移给子类完成 即:处理步骤父类中定义好,具体实现延迟到子类中定义。 模板方法模式的使用场景:实现一个算法时,整体步骤很固定。但是某些部分易变。易变部分可以抽象出来,供子类实现。
开发中的场景: 数据库访问的封装。 Junit测试 servlet中doget dopost方法调用,HeadFirst中还提到Java CompareTo()方法也相识一个钩子函数。
public abstract class BankTemplate { public void takeNumber() { System.out.println("领取排队号"); } //办理具体的业务 这里不能确定这个步骤 不提供实现 public abstract void transact(); public void feedback() { System.out.println("给出反馈评价"); System.out.println("---------end----------"); } //步骤是固定的 不能被重写 public final void process() { this.takeNumber(); //调用具体的子类业务方法。 也称为钩子方法 this.transact(); this.feedback(); } } public class Client { public static void main(String[] args) { BankTemplate bank1 = new BankTemplate() { @Override public void transact() { System.out.println("取钱"); } }; bank1.process(); BankTemplate bank2 = new BankTemplate() { @Override public void transact() { System.out.println("存钱"); } }; bank2.process(); BankTemplate bank3 = new BankTemplate() { @Override public void transact() { System.out.println("贷款"); } }; bank3.process(); BankTemplate bank4 = new BankTemplate() { @Override public void transact() { System.out.println("还款"); } }; bank4.process(); System.exit(0); } }