模板模式-Template Pattern

一、定义

一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

二、结构

请添加图片描述

三、实现

Game

public abstract class Game {
    abstract void initialize();

    abstract void startPlay();

    abstract void endPlay();

    //模板
    public final void play() {

        //初始化游戏
        initialize();

        //开始游戏
        startPlay();

        //结束游戏
        endPlay();
    }
}

Cricket

public class Cricket extends Game {

    @Override
    void endPlay() {
        System.out.println("Cricket Game Finished!");
    }

    @Override
    void initialize() {
        System.out.println("Cricket Game Initialized! Start playing.");
    }

    @Override
    void startPlay() {
        System.out.println("Cricket Game Started. Enjoy the game!");
    }
}

FootBall

public class Football extends Game {

    @Override
    void endPlay() {
        System.out.println("Football Game Finished!");
    }

    @Override
    void initialize() {
        System.out.println("Football Game Initialized! Start playing.");
    }

    @Override
    void startPlay() {
        System.out.println("Football Game Started. Enjoy the game!");
    }
}

测试

public class TemplatePatternDemo {
    public static void main(String[] args) {

        Game game = new Cricket();
        game.play();
        System.out.println();
        game = new Football();
        game.play();
    }
}

四. mybatis模板模式浅探之BaseExecutor

BaseExecutor 主要负责实现 MyBatis 中的 SQL 语句执行逻辑,包括缓存管理、事务管理和 SQL 语句的执行。具体来说,它的主要作用包括:

  • 提供缓存管理功能:BaseExecutor 通过维护两级缓存,实现了对 SQL 语句执行结果的缓存。一级缓存是基于执行器的,二级缓存是基于 SqlSessionFactory 的。这样可以大大减少数据库访问次数,提高应用程序的性能。
  • 实现事务管理功能:BaseExecutor 提供了事务管理功能,可以控制事务的提交和回滚。在执行 SQL 语句的过程中,如果发生异常,BaseExecutor 会自动回滚事务,保证数据的完整性。
  • 执行 SQL 语句:BaseExecutor 通过调用 StatementHandler 对象的方法,执行 SQL 语句并返回执行结果。在执行 SQL 语句之前,BaseExecutor 会将 SQL 语句和参数传递给 StatementHandler 对象,由它来进行具体的执行操作。

根据传入的语句类型,创建不同的语句处理器,执行不同的方法。避免了多重条件判断,动态选择行为。
![](https://img-blog.csdnimg.cn/f7f470cbc3624033a0863116f3c3a1a1.

public class BaseExecutor implements Executor{

  private <E> List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
    List<E> list;
    localCache.putObject(key, EXECUTION_PLACEHOLDER);
    try {
      // 根据不同的执行器调用查询方法。
      list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql);
    } finally {
      localCache.removeObject(key);
    }
    // 存入缓存
    localCache.putObject(key, list);
    if (ms.getStatementType() == StatementType.CALLABLE) {
      localOutputParameterCache.putObject(key, parameter);
    }
    return list;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值