设计模式之模版方法模式

时间:2021-10-02 20:33:53

1、模版方法模式简介:

  a、模版方法模式的简单介绍:

  -  模版方法模式是编程中经常用到模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提上重新定义该算法的某些特定步骤。

  b、核心:处理某个流程中的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用模版方法模式,将这个节点的代码实现转移给子类中完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义。


2、简单的代码演示:

-  在 BankTemplateMethod 类中添加 takeNumber() 方法、evaluate() 方法(为流程中确定的步骤),transact() 方法在子类中确定(暂时不确定的方法,在 Client 测试类中以匿名内部类的方式实现),process() 方法为流程控制方法。

package com.geeklicreed.templatemethod;
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();
}
}
package com.geeklicreed.templatemethod;public class Client {public static void main(String[] args) {BankTemplateMethod bankTemplateMethod = new BankTemplateMethod() {@Overridepublic void transact() {System.out.println("办理取款业务");}};bankTemplateMethod.process();/*输出结果为:取号排队办理取款业务反馈评分*/}}


3、方法回调问题(钩子方法):

  -  好莱坞原则“Don't call me, we'll call you back ”

  *  在好莱坞中,当艺人把简历提交给好莱坞的娱乐公司时,所要做的就是等待,整个过程由娱乐公司控制,演员只能够被动地服务安排,在需要的时候再由公司安排具体环节的演出。

  -  在软件开发中,我们可以将 call 翻译成调用。子类不能够调用父类,而通过父类调用子类。这些调用步骤已经在父类中写好,完全由父类控制整个过程。


4、开发中常用的场景:

  -  实现一个算法时,整体步骤很固定。但是,某些部分易变。易变部分可以抽象出来,供子类实现。

  比如:

  -  数据库访问的封装。

  -  Junit 单元测试。

  -  serlvet 中关于 doGet; doPost 方法调用。

  -  Hibernate 中的模版程序。

  -  spring 中 JDBCTemplate、HibernateTemplate 等。


本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1929973