Java的生成器模式(又名建造者模式),你真的会了吗
0 前言
全是干货的技术殿堂
文章收录在我的 GitHub 仓库,欢迎Star/fork:
Java-Interview-Tutorial
https://github.com/Wasabi1234/Java-Interview-Tutorial
1 基本概念
1.0 为什么需要生成器模式?
系统中一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车!
这时就可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。
用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。
在软件开发中,也存在大量类似汽车一样的复杂对象,它们拥有一系列属性,这些属性中有些是引用类型的成员对象。而且在这些复杂对象中,还可能存在一些限制条件,如
- 某些属性没有赋值则复杂对象不能作为一个完整的产品使用
- 有些属性的赋值必须按照某个顺序,一个属性没有赋值之前,另一个属性可能无法赋值
复杂对象相当于一辆有待建造的汽车,而对象的属性相当于汽车的部件,建造产品的过程就相当于组合部件的过程。由于组合部件的过程很复杂,因此,这些部件的组合过程往往被“外部化”到一个称作建造者的对象里,建造者返还给客户端的是一个已经建造完毕的完整产品对象,而用户无须关心该对象所包含的属性以及它们的组装方式,这就是建造者模式的由来。
1.1 定义
维基百科定义
生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。
它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。简单理解
将一个复杂对象的构建与它的表示分离,使得同样的构建过程,可以创建不同的表示.
用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道。通用流程
先创建一个初始对象,然后逐渐添加新东西,最后调用build()
方法完成构建。
1.2 类型
创建型
2 适用场景
在以下情况考虑使用生成器模式:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
- 当构造过程必须允许被构造的对象有不同的表示时
- 一个对象有非常复杂的内部结构(很多属性)
- 想把复杂对象的创建和使用分离
3 优点
- 封装性好,创建和使用分离
- 扩展性好、建造类之间独立、一定程度上解耦
4 缺点
- 产生多余的Builder对象
- 产品内部发生变化,建造者都要修改,成本较大,所以需要精心设计
5 与其他设计模式的区别
5.1 与工厂模式的区别
工厂模式特点
- 注重方法调用顺序
- 创建复杂的作品,有各种复杂的部件组成
- 不止要创建出来,还要知道产品有哪些部件组成
生成器模式特点
- 注重创建产品,不关心顺序
- 创建出来的都一个样
- 只要创建出来对象即可
6 来一场实战的分析
- 课程类
- 课程建造者
- 课程真正建造
- 课程教练
7 开源框架应用实例
7.1 JDK#StringBuilder
方法几乎都是返回一个自身实例
7.2 Guava不可变集合类
建造者内部类
和之前同理,必存在一个 build 方法
7.3 Spring-BeanDefinition
7.4 Mybatis - SqlSessionFactoryBuilder
- 入参为一个配置,传给默认的 session 工厂进行构造
- 解析 mybatis 的 xml 文件
Java的生成器模式(又名建造者模式),你真的会了吗相关推荐
- 面试官都爱问的java模式之建造者模式!!!
开心一刻: 同事妻管严,零花钱少的可怜,今天一起打牌他输了400块没钱了.想想也可怜,就请他吃饭,吃饭时他说兄弟借十块钱吧,买张请柬回去好报帐,我当时就呆了,又TM学会一招... 简言: 建造者模式定 ...
- java设计模式之原型模式和建造者模式的写法(二)
背景 原型模式和建造者模式属于创建型模式,在开发中经常会用到,那么这两种设计模式是怎么写的呢,下面进行代码演示. 原型模式 原型模式的核心就是复制 package com.example.protot ...
- 不蹭热度了,传统生成器模式(建造者模式)——Builder Pattern
不蹭热度了,传统生成器模式(建造者模式)--Builder Pattern 生成器模式 组成 Product IBuild Builder Director 总结 生成器模式 实际中,更新任何类都可以 ...
- java设计模式建造_java设计模式-建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示. 建造者模式将一个产品的内部表象和产品的生成过程分割开来,建造对象的时候只需要指定需要建造的类型,而不必了解具体的 ...
- java设计模式(五)--建造者模式(Builder)
转载:http://zz563143188.iteye.com/blog/1847029 工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象 ...
- 设计模式之---工厂模式、建造者模式
☺ 对于工厂模式,个人学习需要掌握 注意答案的重点标黑了.对于工厂模式.建造者模式,掌握,我下面这几点就很棒棒. 一.工厂模式 1.什么是工厂模式:[关键字factory] 答:创建对象时,不直接ne ...
- 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...
- 23种设计模式之单例模式、工厂模式、原型模式、建造者模式
系列文章目录 第一章:程序设计原则-单一职责.接口隔离.依赖倒置.里式替换 第二章:程序设计原则-开闭原则.迪米特法则.合成复用原则 文章目录 系列文章目录 一.设计模式简单介绍 1.1.什么是设计模 ...
- 创建型模式:建造者模式
前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. 个人公众号原文: 创建型模式:建造者模式 五大创建型模式之四:建造者模式. 简介 姓名 :建造者模式 英文名 : ...
- 设计模式:工厂模式和建造者模式
工厂模式和建造者模式都是创建型模式,说白了都是为了创建对象为目标用途的设计模式.肯定会拿来比较,一般来说肯定是工厂模式更易懂,使用在平时的项目中更顺手.而建造者模式,更多是创建一个对象,要给这个对象给 ...
最新文章
- Android中的资源访问
- Mastering KVM Virtualization:第二章 KVM内部原理
- linux 访问不同网段
- 安卓应用用户数据_用户指标数据应用
- java数组数据结构_Java数据结构之数组
- 【4】协同过滤算法的原理与实现
- 代码规范之prettier+eslint实践
- Oracle数据库常用undo查询思路
- matplotlib text 文字处理
- ue4蓝图运行顺序_UE4蓝图解析(四)
- C++ STL 文件内容的显示和追加
- Hadoop的安装教程,很详细
- Python词频统计(去重)
- foxmail的邮局和端口_Foxmail如何进行POP、SMTP设置(pop)
- 个人主页博客网页设计制作HTML5+CSS大作业——清新春暖花开个人博客网站(6页)
- 希腊字母表 ← LaTeX
- 5G成鸡肋?运营商可能冷处理,中国移动则加快建设4G的FDD900
- hive —— struct 复合结构
- Windows的权限(用户、组和访问控制)
- 看《西游记》谈团队管理