建造者设计模式

可以看到这个学生类的属性是非常多的,所以构造方法不是一般的长,如果我们现在直接通过new的方式去创建:

可以看到,我们光是填参数就麻烦,我们还得一个一个对应着去填,一不小心可能就把参数填到错误的位置了。

所以,我们现在可以使用建造者模式来进行对象的创建:

java;gutter:true; class Student { private int id; private int age; private String name; private String college; private String profession; private List hobby;</p> <pre><code>// 设置为私有,只给内部类用 private Student(int id, int age, String name, String college, String profession, List hobby) { this.id = id; this.age = age; this.name = name; this.college = college; this.profession = profession; this.hobby = hobby; } /** * 获取建造者 * * @return 建造者 */ public static StudentBuild build() { return new StudentBuild(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCollege() { return college; } public void setCollege(String college) { this.college = college; } public String getProfession() { return profession; } public void setProfession(String profession) { this.profession = profession; } public List getHobby() { return hobby; } public void setHobby(List hobby) { this.hobby = hobby; } @Override public String toString() { return "Student{" + "id=" + id + ", age=" + age + ", name='" + name + '\'' + ", college='" + college + '\'' + ", profession='" + profession + '\'' + ", hobby=" + hobby + '}'; } public static class StudentBuild { //Builder也需要将所有的参数都进行暂时保存,所以Student怎么定义的这里就怎么定义 private int id; private int age; private String name; private String college; private String profession; private List hobby; // 这里返回this是为了链式调用 public StudentBuild id(int id) { this.id = id; return this; } public StudentBuild age(int age) { this.age = age; return this; } public StudentBuild name(String name) { this.name = name; return this; } public StudentBuild college(String college) { this.college = college; return this; } public StudentBuild profession(String profession) { this.profession = profession; return this; } public StudentBuild hobby(String... hobby) { this.hobby = Arrays.asList(hobby); return this; } public Student build() { return new Student(id, age, name, college, profession, hobby); } } </code></pre> <p>}</p> <pre><code> 现在,我们就可以使用建造者来为我们生成对象了: ;gutter:true;
public static void main(String[] args) {
Student student = Student.build()
.id(1)
.age(23)
.name("张三")
.college("信息工程学院")
.profession("学生")
.hobby("抽烟", "喝酒", "烫头")
.build();
//Student{id=1, age=23, name=’张三’, college=’信息工程学院’, profession=’学生’, hobby=[抽烟, 喝酒, 烫头]}
System.out.println(student);
}

Original: https://www.cnblogs.com/zhangzhixi/p/16405436.html
Author: Java小白的搬砖路
Title: 建造者设计模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612703/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG

    这一周线上碰到一个诡异的BUG。 线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功。 通过日志发现,从凌晨5:26分开始到5:5…

    数据库 2023年6月16日
    099
  • MySQL事务基本使用

    1 事务概述 1.1 事务的支持情况 1.2 事务的特性 1.3 事务的状态 2 使用事务 2.1 显示事务 2.2 隐藏事务 3 事务隔离等级 3.1 数据并发问题 3.2 事务…

    数据库 2023年6月9日
    096
  • 汇编语言学习记录一

    0x00——什么是汇编语言? 汇编语言:早期实现程序员和机器进行交互的汇编指令集。 汇编指令,通过编译器,转换成机器码,从而使 机器 理解其指令。 0x01——汇编语言的组成 汇编…

    数据库 2023年6月11日
    072
  • java中如何在ISO-8859-1和UTF-8之间相互转换呢?

    我们都知道在一些特殊的场景,我们需采用特殊的编码格式,如:UTF-8,但是系统默认的编码为ISO-8859-1 那么我们就需要将编码转换为我们所需的编码格式, 今天我就遇到这个问题…

    数据库 2023年6月11日
    072
  • [springmvc]从前端获取参数以及显示

    6.接收请求参数以及数据回显 接收普通参数 参数名与前端传递的参数名相同时 前端表单名name=name $Title$ username: 后端收到的参数名String name…

    数据库 2023年6月16日
    090
  • postman结合newman生成测试报告

    1. cmd窗口安装newman npm install -g newman 2. cmd窗口安装newman-html报告 nnpm install -g newman-repo…

    数据库 2023年5月24日
    061
  • 【黄啊码】教你用python画冰墩墩

    python;gutter:true; import turtle</p> <p>turtle.title('PythonBingDwenDwen…

    数据库 2023年6月16日
    054
  • LeetCode 9. 回文数

    题目 题目链接:https://leetcode.cn/problems/palindrome-number/ 给你一个整数x,如果x是一个回文整数,返回true;否则,返回fal…

    数据库 2023年6月11日
    087
  • MySQL行构造器

    子查询返回多列的办法 主要用途,项目中初版使用子查询返回一列用来限制主表,项目新版本中,表关联建改为多列时建议使用 Original: https://www.cnblogs.co…

    数据库 2023年6月9日
    069
  • 安装多个Jdk

    安装 官方下载地址 目录结构: 配置 PATH 修改 注意:此处的操作可能会有其他未知的问题,最好还是理解window的命令查找机制,然后还是需要根据具体问题具体分析解决。 测试 …

    数据库 2023年6月11日
    084
  • MySQL排序方案选择

    总结一下,MySQL 总是使用 “最快” 的排序方案。 总结 总结一下,MySQL 总是使用 “最快” 的排序方案: 1、当排序数据…

    数据库 2023年6月9日
    093
  • 汇编语言Assembly Language.asm–8086(持续更新)

    汇编语言Assembly Language.asm–8086 数据转移指令MOV 数据流向图 XCHG OPD,OPS数据交换指令 功能:将源操作数和目的操作数内容互换…

    数据库 2023年6月14日
    068
  • Docker 完整版教程

    Docker 安装 一、安装前必读 在安装 Docker 之前,先说一下配置,我这里是Centos7 Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。 注意:本文的…

    数据库 2023年6月14日
    070
  • 1. SQL

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    079
  • java 桥接方法

    1.桥接方法简介 桥接方法是jdk1.5引入泛型后,为使java泛型方法生成的字节码与jdk1.5版本之前的字节码兼容由编译器自动生成的。 可用 method.isBridge()…

    数据库 2023年6月16日
    088
  • 新版 google 谷歌浏览器跨域问题

    新版本的firefox火狐浏览器限制了 127.0.0.1 本地部署测试的时候,用火狐浏览器需要把 前端的 后台中的服务地址改成 http://localhost:8081 浏览器…

    数据库 2023年6月6日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球