设计模式之美 - 生成器模式

设计模式之美目录:https://www.cnblogs.com/binarylei/p/8999236.html

Builder 模式,中文翻译为建造者模式构建者模式生成器模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。在学习生成器模式的过程中,思考如下两个问题:

  1. 直接使用构造函数或者配合 setter 方法就能创建对象,为什么还需要建造者模式来创建呢?
  2. 建造者模式和工厂模式都可以创建对象,那它们两个的区别在哪里呢?

1. Builder 模式使用

以 Spring BeanDefinitionBuilder 为例。AbstractBeanDefinition 的属性非常多,不同的创建方式需要填写不同的属性,为了方便创建对象,统一 BeanDefinition 的创建,提供了 BeanDefinitionBuilder 类链式创建对象。

BeanDefinition bd = BeanDefinitionBuilder
.rootBeanDefinition(BeanA.class)
.addConstructorArgReference("beanB")
.getBeanDefinition();

2. 什么时候使用生成器模式

大多数时候,我们可以直接通过 new 或 setter 方式创建对象。如果一个类中有很多属性,为了避免构造函数的参数列表过长,影响代码的可读性和易用性,我们可以通过构造函数配合 set() 方法来解决。但是,如果存在下面情况中的任意一种,我们就要考虑使用建造者模式了。

  • 必填的属性有很多。如果构造函数中把这些必填属性太多,那构造函数就又会出现参数列表很长的问题。如果我们把必填属性通过 set() 方法设置,那校验这些必填属性是否已经填写的逻辑就无处安放了。

  • 类属性之间有约束关系。我们继续使用构造函数配合 set() 方法的设计思路,那这些依赖关系或约束条件的校验逻辑就无处安放了。

  • 创建不可变对象。也就是说,对象在创建好之后,就不能再修改内部的属性值,要实现这个功能,我们就不能在类中暴露 set() 方法。构造函数配合 set() 方法来设置属性值的方式就不适用了。


每天用心记录一点点。内容也许不重要,但习惯很重要!

最新文章

  1. 《UML大战需求分析》阅读随笔(一)
  2. python 爬虫(二)
  3. 使用命令行工具运行Xcode 7 UI Tests
  4. setInterval和clearInterval
  5. Xenko基础API笔记3- Pointers指针设备屏幕上点对应的手指触摸。
  6. c# DESEncrypt 加密、解密算法
  7. 【59测试】【树】【dp】
  8. [地图代数]处理DEM中的高程异常值——ArcGIS栅格计算的应用
  9. centos下网络的基本配置方法讲解
  10. placeholder插件及placeholder默认颜色修改
  11. selenium python (三)鼠标事件
  12. git提交小结
  13. Redis的安装与使用
  14. 一个不喜欢读书的Javaer的读书单
  15. Delphi系统托盘组件 TTrayIcon 简介
  16. hdu_5879_Cure(打表)
  17. scanf函数之扫描集
  18. TensorflowTutorial_二维数据构造简单CNN
  19. Java 深度克隆 clone()方法重写 equals()方法的重写
  20. C语言面试题分类->宏定义

热门文章

  1. 20165212实验三——敏捷开发与XP实践
  2. Redis学习笔记-数据操作篇(Centos7)
  3. [LOJ6198]谢特
  4. linux sort 多列正排序,倒排序
  5. ambassador 学习一基本试用
  6. 树莓派系列教程:安装系统与配置环境,使用PuTTy与VNC图形界面远程登录
  7. 32位C#程序连接64位ORACLE数据库
  8. centos6.6 myphpadmin
  9. Web验证方式(4)--JWT
  10. 第十届蓝桥杯 试题 E: 迷宫