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 这个工厂对象。

Java设计模式-Builder模式相关推荐

  1. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  2. Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

    Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...

  3. Java 设计模式——建造者模式(Builder Pattern)

    前言 一.简介 ​二.实现方式 三.常见第一种方式 (1)一般有以下几个角色 (2)举个例子 (3)具体步骤 (4)具体代码 三.第二种方式 (1)主要有三个角色:抽象建造者.具体建造者.产品 (2) ...

  4. 重学Java设计模式-创建者模式-建造者模式

    重学Java设计模式-创建者模式-建造者模式 内容摘自:重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」 | bugstack 虫洞栈 建造者模式介绍 图片来自:https:/ ...

  5. 设计模式-Builder模式

    目录 一个例子(做汤) 人工做汤 机器做汤(使用Builder模式) 优缺点 优点 缺点 Builder模式属于创建型模式. 它是将一个复杂对象的构建过程隐藏起来,让使用者只关系自己要生成什么样的对象 ...

  6. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  7. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  8. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  9. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

最新文章

  1. 谷歌浏览器异步请求后台session变了_session打爆面试官
  2. 自定义android控件EditText 自定义边框 背景
  3. Android下资源图片的加密和解密
  4. 如何避免云整合的问题
  5. IET Cyber-Systems Robotics线上研讨会:聚焦人工智能与机器人前沿
  6. Java 全半角转换
  7. 牛客 CCA的区间 dp + 补集转移
  8. 产品运营 跨境支付_餐饮网店的运营 跨境支付哪个平台最好
  9. 【Python】Python里的复数运算
  10. 读取usb口数据_Mixly 第12课 模拟值读取实验串口使用
  11. C#中手动引用COM组建的例子
  12. 类818tu.c微信小说分销系统设计之定时模板消息源码
  13. Java获取时间戳,System.currentTimeMillis() 和 System.nanoTime() 哪个更快?
  14. 单链表创建以及头插、尾插(一)-(B站)史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】
  15. c语言且不用 怎么表示,“并且”用C语言怎么表示
  16. Andre Weil的一生
  17. 对标苹果,小米的高端不只是学习
  18. 一文助你入门HTML(❤ ω ❤)
  19. 部分opencv中的GPU加速函数(中文翻译)
  20. 西安航空学院计算机等级成绩查询,64所院校成绩查询网址

热门文章

  1. 二进制转八进制c 语言,C 语言实例 – 八进制与二进制相互转换
  2. 花里胡哨免杀《剪切板加载器》
  3. android 介绍
  4. Android AudioEffect音效移植
  5. 利用Messager信使服务在局域网内发信息
  6. 我可以使用哪些“ clearfix”方法?
  7. 计算机视觉(相机标定)-2.1 摄像机标定
  8. 说说ShellExecuteEx
  9. 构建FTP服务器——server-u
  10. xp sql2000 安装SP4失败解决方案