mybatis 源码系列(六) 设计模式

2019/05/17 mybatis 浏览

以前我们在学习Java的时候,都会将Java中的设计模式,记忆中用的比较多的好像有23种吧,但是这些设计模式其实自己在工作中除了那么几种几乎很少用到.

不过最近在看mybatis的源码,看到了很多设计模式的应用,因此,想把这些在mybatis中运用的设计模式都记录下来,加深自己的印象和理解,后面也可以在工作中更多的去使用它

写代码是们艺术活

你是否会看某些代码而入迷呢?

Builder模式

提供一个Builder建造器,通过隐藏目标对象的复杂属性,而是通过Bulder来一步一步赋值目标对象属性,最终Builder构建目标对象,这个在mybatis中的Envionment类中的Builder已使用

先来看org.apache.ibatis.mapping.Envionment.java

/**
 * 环境对象
 * @author Clinton Begin
 */
public final class Environment {
  /***
   * 环境id,例如:dev、prod
   */
  private final String id;
  /***
   * 事务工厂
   */
  private final TransactionFactory transactionFactory;
  /***
   * 数据库连接数据源对象
   */
  private final DataSource dataSource;
 //getter and setters and  constructs   
    
    /***
   * Builder构造器
   * 比如
   * new Builder("dev").dataSource(ds).transactionFactory(tf).build();
   */
  public static class Builder {
      private String id;
      private TransactionFactory transactionFactory;
      private DataSource dataSource;

    public Builder(String id) {
      this.id = id;
    }

    public Builder transactionFactory(TransactionFactory transactionFactory) {
      this.transactionFactory = transactionFactory;
      return this;
    }

    public Builder dataSource(DataSource dataSource) {
      this.dataSource = dataSource;
      return this;
    }

    public String id() {
      return this.id;
    }

    public Environment build() {
      return new Environment(this.id, this.transactionFactory, this.dataSource);
    }

  }
    
}

通过上面的Builder,我们就可以使用这一的代码来构建我们的Environment对象

//属性之数据源
DataSource dataSource=null;
//属性之事务管理器
TransactionFactory transactionFactory=null;
//基于Builder来构建
Environment environment=new Environment.Builder("dev").dataSource(dataSource).transactionFactory(transactionFactory).build();
//根据构造函数来构建
Environment environment1=new Environment("prod",transactionFactory,dataSource);

这只是提供了一种快捷的创建对象的方式,最终build()方法也是调用目标对象的构造函数来进行构建,根据开发者喜欢可以自行使用.

站内搜索

    Table of Contents