构建者(Builder)设计模式(又叫生成器设计模式):

当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config、VO、PO、Entity...),要创建的话可能就需要了解这个类的内部结构,还有这些东西是怎么组织装配等一大坨乱七八糟的东西,这个时候就会增加学习成本而且会很混乱,这个时候就想啊想一种什么法子来管理一下这个类中的数据呢,怎么在创建的时候让它按部就班的来,并且代码可读性很好别让我看花了眼啊,我要的东西也能都很好设置进来,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。

  1. public class Student {
  2.  
  3. private int id;
  4. private String name;
  5. private String passwd;
  6. private String sex;
  7. private String address;
  8.  
  9. // 构造器尽量缩小范围
  10. private Student() {
  11. }
  12.  
  13. // 构造器尽量缩小范围
  14. private Student(Student origin) {
  15. // 拷贝一份
  16. this.id = origin.id;
  17. this.name = origin.name;
  18. this.passwd = origin.passwd;
  19. this.sex = origin.sex;
  20. this.address = origin.address;
  21. }
  22.  
  23. public int getId() {
  24. return id;
  25. }
  26.  
  27. public String getName() {
  28. return name;
  29. }
  30.  
  31. public String getPasswd() {
  32. return passwd;
  33. }
  34.  
  35. public String getSex() {
  36. return sex;
  37. }
  38.  
  39. public String getAddress() {
  40. return address;
  41. }
  42.  
  43. /**
  44. * Student的创建完全依靠Student.Builder,使用一种方法链的方式来创建
  45. *
  46. */
  47. public static class Builder {
  48.  
  49. private Student target;
  50.  
  51. public Builder() {
  52. target = new Student();
  53. }
  54.  
  55. public Builder address(int id) {
  56. target.id = id;
  57. return this;
  58. }
  59.  
  60. public Builder name(String name) {
  61. target.name = name;
  62. return this;
  63. }
  64.  
  65. public Builder password(String passwd) {
  66. target.passwd = passwd;
  67. return this;
  68. }
  69.  
  70. public Builder sex(String sex) {
  71. target.sex = sex;
  72. return this;
  73. }
  74.  
  75. public Builder address(String address) {
  76. target.address = address;
  77. return this;
  78. }
  79.  
  80. public Student build() {
  81. return new Student(target);
  82. }
  83.  
  84. }
  85.  
  86. }

Student并不是直接new出来的,对其构造器进行了处理使其可访问范围尽可能的小,只让它通过Student.Builder来构建自己,在Student.Builder中提供了一种类set的方法链的方式

来设置值,然后在最后的build()方法的时候会返回一个Student对象,现在要创建一个Student对象,

  1. Student s=new Student.Builder().name("CC").password("qwerty").sex("男").address("银河系第二旋臂").build();

再对比一下如果不使用构造者模式(一般情况下的用法):

  1. public String getName() {
  2. return name;
  3. }
  4.  
  5. public void setName(String name) {
  6. this.name = name;
  7. }
  8.  
  9. public String getPasswd() {
  10. return passwd;
  11. }
  12.  
  13. public void setPasswd(String passwd) {
  14. this.passwd = passwd;
  15. }
  16.  
  17. public String getSex() {
  18. return sex;
  19. }
  20.  
  21. public void setSex(String sex) {
  22. this.sex = sex;
  23. }
  24.  
  25. public String getAddress() {
  26. return address;
  27. }
  28.  
  29. public void setAddress(String address) {
  30. this.address = address;
  31. }
  32.  
  33. }
  1. Student s=new Student("CC","qwerty","男","银河系第二旋臂");

对比一下进行一个优劣性分析:

一般的套路:优点是比较简单,开发效率高,缺点是如果参数真的很多的话鬼知道每个对应的是什么意思啊。

Builder模式:优点是可以将构造器的setter方法名取成类似注释的方式,这样我们可以很清晰的知道刚才究竟设置的什么值,可读性较高,缺点是比较冗长。

总结:初步的理解Builder模式解决了要设置的参数过多不好管理的问题

构建者模式Builder创建对象的更多相关文章

  1. 构建者模式(Builder pattern)

    构建者模式应用场景: 主要用来构建一些复杂对象,这里的复杂对象比如说:在建造大楼时,需要先打牢地基,搭建框架,然后自下向上地一层一层盖起来.通常,在建造这种复杂结构的物体时,很难一气呵成.我们需要首先 ...

  2. php构建型模式(Builder pattern)

    练代码,增加了调用时的输出. <?php /* The builder pattern separates the construction of a complex object from i ...

  3. 设计模式之构建者模式(Builder):初步理解

    构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...

  4. Item 2---遇到构造器具有多个参数时,要考虑用构建器;Builder模式

    问题,面对这种一个构造器具备多个参数的问题,现有的做法是使用重叠构造器的方式,该方式存在的问题: public class NutritionFacts { private final int ser ...

  5. 设计模式之建造者模式——Builder

    一.概述 Builder模式,中文名为建造者模式,又名生成器模式.构建者模式等,是创建型设计模式之一.用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 1.适用性: 对象 ...

  6. 深入探索Java设计模式之构建器模式(五)

    抽丝剥茧 细说架构那些事——[优锐课] 简单的程序不需要大量的设计过程,因为它们只关注有限的解决方案,仅使用几个类.大型程序专注于广泛的设计,该设计比好的设计范例的任何其他属性都更能利用可重用性.宏伟 ...

  7. 创建者模式-Builder

    创建者模式使用多个简单的对象一步一步构建成一个复杂的对象.它提供了一种创建对象的最佳方式.一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的. 一.类图 创建者 ...

  8. 设计模式—建造者模式(Builder)

    title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对 ...

  9. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

随机推荐

  1. Java实现 蓝桥杯VIP 算法提高 Quadratic Equation

    算法提高 Quadratic Equation 时间限制:1.0s 内存限制:512.0MB 问题描述 求解方程ax2+bx+c=0的根.要求a, b, c由用户输入,并且可以为任意实数. 输入格式: ...

  2. Java实现 蓝桥杯VIP 算法提高 插入排序

    算法提高 插入排序 时间限制:1.0s 内存限制:256.0MB  插入排序 问题描述 排序,顾名思义,是将若干个元素按其大小关系排出一个顺序.形式化描述如下:有n个元素a[1],a[2],-,a[ ...

  3. java实现奇怪的比赛

    ** 奇怪的比赛** 某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必 ...

  4. 在树莓派3b or 3a or 4a or 4b上搭建OpenWebRX

    OpenWebRx OpenWebRX 项目提供了搭建WebSDR的解决方案,该项目基于 Python 编写,除了完全开源外,官方还提供了完备的技术文档.您只需要一台电脑或是树莓派,一个SDR设备和网 ...

  5. 【JVM故事】了解JVM的结构,好在面试时吹牛

    class文件格式 参考上一篇文章<[JVM故事]一个Java字节码文件的诞生记>,后续还会专门讲解class文件的内部结构. 数据类型 jvm包括两种数据类型,基本类型和引用类型. 基本 ...

  6. HDFS ha 格式化报错:a shared edits dir must not be specified if HA is not enabled.

    错误内容: Formatting using clusterid: CID-19921335-620f-4e72-a056-899702613a6b2019-01-12 07:28:46,986 IN ...

  7. ubuntu18.04安装部署typecho个人博客

    LNMP一键安装包安装 wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnm ...

  8. Nice Jquery Validator 方法

    .validator() .validator( options ) 描述:根据参数初始化验证,验证 jQuery 选中的表单 参数:{Object} options - 可选,参考配置选项 示例: ...

  9. linux使用组ID(SGID)共享文件

    假如你有这样一个需求,一个小组内很多成员共同研究一个项目,为了这个项目我们需要分配一个具体的目录. 所有成员都拥有该目录的使用权限,可以互相操作成员的文件及内容.而且不允许其他人查看. 现在开始操作: ...

  10. Springboot打包放到Tomcat中报错 One or more listener fail to start

    1.问题: Springboot项目直接启动不报错,打war包放到外部容器Tomcat.东方通上,在@Weblistener注解的监听器类中报错 One or more listener fail t ...