模板模式介绍
模板方法模式是编程中经常用得到的模式,它定义了一个操作中的算法核心,然后将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。 换个说法就是某个流程的代码已经都具备了,但是其中某个节点的代码暂时不能确定,因此,我们采用模板方法模式,将这个节点的代码实现转移到子类中完成,即:处理步骤父类中定义好,具体的实现延迟到子类定义中。
代码实现
我们通过银行办理业务,排队区号来操作来模拟模板模式。
/**
* 父类
* @author 波波烤鸭
*
*/
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 static void main(String[] args) {
// 采用匿名内部类
BankTemplateMethod btm1 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要存钱!");
}
};
btm1.process();
System.out.println("---------------------------");
BankTemplateMethod btm2 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要理财!我这里有2000万韩币");
}
};
btm2.process();
}
输出
取号排队 我要存钱! 反馈评分 --------------------------- 取号排队 我要理财!我这里有2000万韩币 反馈评分
小结:银行为了方便顾客办理业务,所以制定了一套固定的业务流程。比如来了先取号排队,然后办理业务,然后评分。取号排队和评分这些功能银行可以实现,但是办理具体的业务就得具体的顾客来实现了。这就是模板模式。
开发中常见的场景
- 数据库访问的封装
- Junit单元测试
- servlet中的doGet和doPost方法
- Hibernate中的模板程序
- Spring中的JdbcTemplate,HibernateTemplate等
- …
本文深入解析模板模式的概念,通过银行办理业务的案例,展示如何利用模板方法模式定义算法骨架,将某些步骤延迟到子类实现,从而在不改变算法结构的前提下重定义特定步骤。
1075

被折叠的 条评论
为什么被折叠?



