Java设计模式-Builder模式
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模式相关推荐
- Java设计模式——Builder模式
前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...
- Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式
Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...
- Java 设计模式——建造者模式(Builder Pattern)
前言 一.简介 二.实现方式 三.常见第一种方式 (1)一般有以下几个角色 (2)举个例子 (3)具体步骤 (4)具体代码 三.第二种方式 (1)主要有三个角色:抽象建造者.具体建造者.产品 (2) ...
- 重学Java设计模式-创建者模式-建造者模式
重学Java设计模式-创建者模式-建造者模式 内容摘自:重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」 | bugstack 虫洞栈 建造者模式介绍 图片来自:https:/ ...
- 设计模式-Builder模式
目录 一个例子(做汤) 人工做汤 机器做汤(使用Builder模式) 优缺点 优点 缺点 Builder模式属于创建型模式. 它是将一个复杂对象的构建过程隐藏起来,让使用者只关系自己要生成什么样的对象 ...
- Java 设计模式——状态模式
概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- Java设计模式-工厂模式(2)工厂方法模式
在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...
- Java设计模式-工厂模式(1)简单工厂模式
Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...
最新文章
- 谷歌浏览器异步请求后台session变了_session打爆面试官
- 自定义android控件EditText 自定义边框 背景
- Android下资源图片的加密和解密
- 如何避免云整合的问题
- IET Cyber-Systems Robotics线上研讨会:聚焦人工智能与机器人前沿
- Java 全半角转换
- 牛客 CCA的区间 dp + 补集转移
- 产品运营 跨境支付_餐饮网店的运营 跨境支付哪个平台最好
- 【Python】Python里的复数运算
- 读取usb口数据_Mixly 第12课 模拟值读取实验串口使用
- C#中手动引用COM组建的例子
- 类818tu.c微信小说分销系统设计之定时模板消息源码
- Java获取时间戳,System.currentTimeMillis() 和 System.nanoTime() 哪个更快?
- 单链表创建以及头插、尾插(一)-(B站)史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】
- c语言且不用 怎么表示,“并且”用C语言怎么表示
- Andre Weil的一生
- 对标苹果,小米的高端不只是学习
- 一文助你入门HTML(❤ ω ❤)
- 部分opencv中的GPU加速函数(中文翻译)
- 西安航空学院计算机等级成绩查询,64所院校成绩查询网址