1.白话文定义
将通用的算法抽象出来,在一个抽象类中公开定义了执行它的模版。子类通过重写抽象类的抽象方法, 执行对应场景的业务,但整体执行流程将按照抽象类中定义的流程执行。
2.角色
- 抽象模版类:定义抽象方法,并定义方法的执行流程;
- 具体模版实现类:实现具体的方法,执行逻辑交给抽象类;
- 客户端调用类。
3.类图
4.代码实现
- 抽象模版类
public abstract class AbstractTransactionTemplate {
abstract void begin();
abstract void doHandler();
abstract void commit();
public void doTransaction() {
begin();
doHandler();
commit();
}
}
- 具体模版实现类
public class TransactionAImpl extends AbstractTransactionTemplate {
@Override
void begin() {
System.out.println("templateA begin");
}
@Override
void doHandler() {
System.out.println("templateA doHandler");
}
@Override
void commit() {
System.out.println("templateA commit");
}
}
public class TransactionBImpl extends AbstractTransactionTemplate {
@Override
void begin() {
System.out.println("templateB begin");
}
@Override
void doHandler() {
System.out.println("templateB doHandler");
}
@Override
void commit() {
System.out.println("templateB commit");
}
}
- 客户端调用类
public class Main {
public static void main(String[] args) {
AbstractTransactionTemplate transactionA = new TransactionAImpl();
transactionA.doTransaction();
AbstractTransactionTemplate transactionB = new TransactionBImpl();
transactionB.doTransaction();
}
}
- .测试结果
5.优点
1.抽取公共部分易于维护;
2.行为由父类控制,子类实现。
6.使用场景(spring中对事务的支持)
1.有多个子类共有的方法,且逻辑相同;
2.重要复杂的方法,可以考虑模版。