模版模式——行为型

75 阅读1分钟

1.白话文定义

将通用的算法抽象出来,在一个抽象类中公开定义了执行它的模版。子类通过重写抽象类的抽象方法, 执行对应场景的业务,但整体执行流程将按照抽象类中定义的流程执行。

2.角色

  1. 抽象模版类:定义抽象方法,并定义方法的执行流程;
  2. 具体模版实现类:实现具体的方法,执行逻辑交给抽象类;
  3. 客户端调用类。

3.类图

image.png

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();
    }
}
  • .测试结果

image.png

5.优点

1.抽取公共部分易于维护;

2.行为由父类控制,子类实现。

6.使用场景(spring中对事务的支持)

1.有多个子类共有的方法,且逻辑相同;

2.重要复杂的方法,可以考虑模版。

7.参考

模版模式