Builder模式是将一个复杂对象的创建和表示分离,使同样的创建过程可以创建不同的表示。它属于建造类模式。
一般来说,如果一个对象的创建比较复杂,超出了构造方法所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象创建,甚至单单了创建产品的一部分而已。
在 Mybatis 环境初始化过程中,SqlSessionFactoryBuilder 会调用 XMLConfigBuilder 读取所有的 MybatisMapConfig.xml 和所有的 *Mapper.xml 文件,构造 Mybatis 运行所需的核心对象 Configuration 对象,然后该 Configuration 对象作为参数构造一个 SqlSessionFactory 对象。
其中 XMLConfigBuilder 在构造 Configuration 对象时,也会调用 XMLMapperBuilder 用于读取 *Mapper.xml 文件,而 XMLMapperBuilder 会使用 XMLStatementBuilder 来读取和 build 所有的 SQL 语句。
在这个过程中有个相似的特点,就是这些 Builder 会读取文件或配置,然后大量 XpathParser 解析、配置或语法解析、反射生成对象、存入结果缓存等步骤,这些工作都不是一个构造方法所能包括的,因此大量采用了 Builder 模式来解决。
对于 Builder 的具体类,方法大都用 build 开头,比如 SqlSessionFactoryBuilder 为例,它包含以下方法。
根据传入不同的参数来构造 SqlSessionFactoryBuilder 这个工厂对象。