文章目录

  • 目的
  • 传统实现方式
  • 构造器模式(Builder模式)

目的

当我们想要创建一个实体的时候,如果该实体中有大量的参数可以根据需求选择是否传入。

传统实现方式

通常我们有两种方式去实现:

  • 重叠构造器
    重叠构造器的场景很常见,通常我们会按照需求不断重载构造方法,提供不同的参数。
    这样的方式当参数多起来的时候,会变得很难阅读,且十分容易发生传入错误的情况,同时还会存在同类型参数只能有一个存在的情况(如只传入作者的话,就无法重载只传入ISBN或只传入分类的情况)。

Demo:

public class Book {/*** 书名和价格为必需,其他内容为可选*/private String name;    //书名private float price;    //价格private String author;  //作者private String ISBN;    //ISBNprivate String type;    //分类public Book(String name, float price) {this.name = name;this.price = price;}public Book(String name, float price, String author) {this.name = name;this.price = price;this.author = author;}public Book(String name, float price, String author, String ISBN) {this.name = name;this.price = price;this.author = author;this.ISBN = ISBN;}
}
  • JavaBean
    使用JavaBean的方式,通过Bean中的get和set方式,创建出的实例会很整洁,读起来也比较容易。
public class Book {/*** 书名和价格为必需,其他内容为可选*/private String name;    //书名private float price;    //价格private String author;  //作者private String ISBN;    //ISBNprivate String type;    //分类public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getISBN() {return ISBN;}public void setISBN(String ISBN) {this.ISBN = ISBN;}public String getType() {return type;}public void setType(String type) {this.type = type;}
}
Book book = new Book();
book.setName("Hello World");
book.setPrice(100.00f);
book.setAuthor("Coder");
book.setISBN("123465789");
book.setType("technology");

这种方式存在一个问题:构造的过程被分配到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。(具体见“Effective Java”第二章第2条)。

构造器模式(Builder模式)

通过构造器模式,既可以保证安全性,又有了良好的可读性,使用时仅需按需调用即可。

package com.example.buildermodel;/*** @author: SuHang* @date: 2021/9/2* @desc:*/
public class Book {/*** 书名和价格为必需,其他内容为可选*/private final String name;    //书名private final float price;    //价格private final String author;  //作者private final String isbn;    //isbnprivate final String type;    //分类//创建构造器public static class Builder {//必须传入的参数,即书名和价格private final String name;    //书名private final float price;    //价格//可选传入的参数 --- 初始化默认值private String author    = "Author";  //作者private String isbn         = "isbn";    //isbnprivate String type       = "TYPE";    //分类//提供创建实例的构造方法,确保传入必传项。public Builder(String name, float price) {this.name = name;this.price = price;}//提供可选参数。public Builder author(String author) {this.author = author;return this;}public Builder isbn(String isbn) {this.isbn = isbn;return this;}public Builder type(String type) {this.type = type;return this;}//最终创建Book的方法public Book build() {return new Book(this);}}private Book(Builder builder) {name = builder.name;price = builder.price;author = builder.author;isbn = builder.isbn;type = builder.type;}
}
Book book = new Book.Builder("Hello World", 100.00f).author("Coder").isbn("123456789").type("technology").build();

构造器模式(Builder模式)相关推荐

  1. 一些实用的编程模式 | Builder模式能用来解决什么问题?

    建造模式,也有翻译成生成器模式的,大家看到后知道他们是一个东西,都是Builer Pattern翻译过来的就行.它是一种对象构建模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...

  2. 建造者模式与原型模式/builder模式与prototype模式/创建型模式

    建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...

  3. 火遍全网的Hutool,如何使用Builder模式构建线程池

    前言 Builder 设计模式也叫做 构建者模式或者建造者模式,名字只是一种叫法,当聊起三种名称的时候知道是怎么回事就行 Builder 设计模式在作者编码过程中,属于比较常用的模式之一.优秀的设计模 ...

  4. Effective Java:Builder模式

    在Java中遇到多个参数时,有3种方式可以构造类. 一.重叠构造器(telescoping constructor)模式 这种模式下,在类中有多个使用不同参数的构造函数,需要什么参数,就写一个相应的构 ...

  5. Builder模式简单理解

    Builder 模式 Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 那么Builder模式的用场景呢? (1) 相同的方法,不同的执行顺序,产生不同的 ...

  6. Android常用设计模式之Builder模式理解

    Android常用设计模式之Builder模式 1 单例模式 2 Builder模式 Builder模式的应用场景 总结 1 单例模式 单例模式之前有详细的介绍,可移步到链接: 常见的单例模式及其特点 ...

  7. effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候

    yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...

  8. 同事写了一个疯狂的类构造器,我要疯了,Builder 模式都不会么?!!

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

  9. java的设计模式 - Builder模式

    Builder 模式的目的? 构造对象的方式过于复杂,不如将之抽离出来.比如,构造器参数过多 这样说也有点抽象,举个例子吧. 举个例子 比如 非常热门的消息队列RabbitMQ 的 AMQP.Basi ...

  10. java设计模式建造_Java设计模式——建造模式(Builder Pattern)

    Builder模式常用例子 今天就简单粗暴的介绍一下Builder模式概念和使用. Dialog的创建 AlertDialog dialog = new AlertDialog.Builder(thi ...

最新文章

  1. React 项目中使用Echarts
  2. React Native之箭头函数和延展操作符(...)
  3. GDCM:Patch File的测试程序
  4. IP地址分类及CIDR划分方法
  5. 编程中的移位运算符简单解释
  6. Ehlib 单元格 图像绘制 代码
  7. 仿souhu页面设计
  8. 韩顺平 java笔记 第8讲 this 类变量 第9讲 类方法
  9. 408考研计算机网络视频,计算机408考研视频哪个好
  10. dnsmasq, ipset和iptables配置
  11. 网络流量监测IP雷达 1.0
  12. 计算机机房系统建设,计算机机房系统建设方案(范文).pdf
  13. 【核心命令 cd pwd mkdir touch ls mv cp echo vim rm】
  14. 8. 无线体内纳米网:基于蓝牙LE接口的数字ID系统
  15. d盘莫名其妙被占空间 win10_Win10系统C盘空间突然爆满的解决方法
  16. 期望风险最小化、经验风险最小化、结构风险最小化
  17. 在studio one中使用iZotope Ozone 9?臭氧9怎么导入到Logic Pro X和AU中?速看教程
  18. 什么是Alpha和Beta测试?
  19. 台湾 天堂java 论坛_tiantangsifu_Rev1388jar_1386db java编写天堂私服*系统 - 下载 - 搜珍网...
  20. Python_Task09:文件与文件系统

热门文章

  1. C#调用Qpdf的界面+拖拽pdf文件到窗口+解除pdf权限密码+另存为
  2. Acer EC-471G BIOS升级注意事项
  3. 项目管理--maven浅析《四》之私服(Nexus)
  4. 计算机等级考试攻略:四级网络工程师
  5. font: 0.5rem/1 tahoma, arial, 'Microsoft YaHei', simsun;
  6. 有效解决鼠标问题的驱动工具-罗技G502游戏鼠标驱动程序提供下载
  7. c语言12个实验报告,C语言实验报告合集
  8. xmpp 即时通讯协议研究
  9. 加载行为:未加载用户已选择禁用宏
  10. 〖Python 数据库开发实战 - MySQL篇⑤〗- 为大家推荐几款经典的数据库可视化工具