模板方法模式
1. 定义
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2. 模板方法模式的结构
- AbstractClass : 抽象类,用来定义算法骨架和原语操作,具体的子类通过重定义这些原语操作来实现一个算法的各个步骤。在这个类里,还可以提供算法中通用的实现。
- ConcreteClass:具体的实现类。用来实现算法骨架中的某些步骤,完成与特定子类相关的功能!
3. 本质
固定算法骨架
4. 实例
去银行办业务,如取钱,存钱或者办卡等,基本都需要三个大的步骤(骨架),首先 (1)取号 (2)办具体业务(3)服务评价打分,然后这三个步骤就可以抽取到父类中进行定义,(1)取号 (3)服务打分是相同操作,可以直接在父类总实现,然后(2)办具体的业务各不相同需要在子类中实现。
BankBusinessTemplate
/**
*银行办业务模板
* @author lijun
* @since 2018-03-19 15:17
*/
public abstract class BankBusinessTemplate {
/**
* 取号
*/
private void takeNumber(){
System.out.println("取到60号,等待办理业务");
}
/**
* 办业务
*/
public abstract void transactBusiness();
/**
* 服务评价打分
*/
private void evaluate(){
System.out.println("非常满意!");
}
/**
* 业务处理
*/
public void progress(){
takeNumber();
transactBusiness();
evaluate();
}
}
WithdrawalBusiness
/**
* 取款业务
* @author lijun
* @since 2018-03-19 15:25
*/
public class WithdrawalBusiness extends BankBusinessTemplate {
/**
* 办业务
*/
@Override
public void transactBusiness() {
System.out.println("正在办理取款业务取出300元.");
}
}
DepositBusiness
/**
* 存款业务
* @author lijun
* @since 2018-03-19 15:28
*/
public class DepositBusiness extends BankBusinessTemplate {
/**
* 办业务
*/
@Override
public void transactBusiness() {
System.out.println("正在办理存款业务存入300元.");
}
}
ApplyCardBusiness
/**
* 办卡业务
* @author lijun
* @since 2018-03-19 15:35
*/
public class ApplyCardBusiness extends BankBusinessTemplate {
/**
* 办业务
*/
@Override
public void transactBusiness() {
System.out.println("正在办理办卡业务 你成功申请了一张卡卡号 8888888888888888");
}
}
调用
@Test
public void testWithDrawal(){
BankBusinessTemplate businessTemplate = new WithdrawalBusiness();
businessTemplate.progress();
}
输出
取到60号,等待办理业务
正在办理取款业务取出300元.
非常满意!
模板设计模式常在数据库操作中使用。JDBC连接数据库通常会有如下几个步骤
1. 获取连接
2. 创建语句集
3. 执行语句集,并且获得结果集
4. 解析语句集
5. 关闭结果集
6. 关闭语句集
7. 关闭连接
其中 1,3,5,6,7 基本都是固定的 2,4是不固定的。同样满足模板方法的结构。我们也可以通过模板方法来实现JDBC连接数据库进行增删改查!具体例子请下载源码。源码只实现了查询功能!