建造者设计模式

可以看到这个学生类的属性是非常多的,所以构造方法不是一般的长,如果我们现在直接通过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)

大家都在看

  • JDBC中常用的类和接口

    DriverManager类 DriverManager类 是JDBC的管理层,用来管理数据库中的 驱动程序。在使用Java操作数据库之前,必须使用 Class类 的 静态方法fo…

    数据库 2023年6月16日
    099
  • 6、发送验证码功能(Redis)

    一、业务需求: 1、后端随机生成短信验证码,并在服务器端保存一定时间(redis); 2、将短信验证码发给用户; 3、用户输入短信验证码提交后,在后端与之前生成的短信验证码作比较,…

    数据库 2023年6月6日
    087
  • Nginx基础入门篇(3)—返回状态码详解

    一般常见返回状态码 200 – &#x670D;&#x52A1;&#x5668;&#x6210;&#x529F;&#x8FD4;&a…

    数据库 2023年6月14日
    0180
  • Linux

    1、关机命令 命令 说明 sync 将数据由内存同步到硬盘中 shutdown 关机 shutdown -h 10 10分钟后关机 shutdown -h now 立马关机 shu…

    数据库 2023年6月16日
    0107
  • 2_CSS

    1. 什么是CSS 1.1 什么是CSS Cascading Style Sheet 层叠样式表 是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一…

    数据库 2023年6月11日
    058
  • [Mysql]null与真值

    SQL的逻辑运算使用的是三值逻辑,逻辑表达式的计算结果有三种可能, true, false, unknown 比较运算的表达式含 NULL时会产生 unknown结果,例如 SEL…

    数据库 2023年6月16日
    086
  • 在RAC上部署OGG并配置OGG高可用

    简介 由于业务系统要与大数据平台进行对接,需要将Oracle DB的数据同步到异构数据库上,故选用也不得不用上了Goldengate方案然鹅,OGG在RAC上的HA配置一直众说纷纭…

    数据库 2023年6月16日
    094
  • Mybatis SqlNode源码解析

    1.ForEachSqlNode mybatis的foreach标签可以将列表、数组中的元素拼接起来,中间可以指定分隔符separator <select id="…

    数据库 2023年6月16日
    080
  • zabbix自定义监控(服务进程和日志)

    zabbix自定义监控 自定义监控进程 测试监控httpd,需要在监控端部署httpd,以方便监控 配置监控脚本 #&#x5728;&#x76D1;&#x6…

    数据库 2023年6月14日
    096
  • 2 Java中 == 和 equals 和 hashCode 的区别

    ==是一个比较运算符; 若比较的是基本数据类型,则比较的是值; 若比较的是引用数据类型,则比较的是它们在内存中的内存地址。 说明:对象是存放在堆中,栈中存放的是对象的引用,因此==…

    数据库 2023年6月6日
    0102
  • Zabbix-(1)安装

    环境: VMware Workstation Pro 16.0 &#x7248;&#x672C; &#x7CFB;&#x7EDF; Centos7 …

    数据库 2023年6月14日
    073
  • Java学习-第一部分-第二阶段-第一节:面向对象编程(高级)

    面向对象编程(高级) 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 类变量和类方法(static) 类变量 类…

    数据库 2023年6月11日
    0105
  • proxySQL with SemiSync

    配置读写分离 先查看一下规则表的表结构 https://github.com/sysown/proxysql/wiki/Main-(runtime)#mysql_query_rul…

    数据库 2023年6月16日
    084
  • 《MySQL自传》

    撰写本文查阅了大量参考资料,也得到很多朋友的指点帮助,特别感谢: Jimmy Yang——阿里云数据库研究员,原Oracle InnoDB Architect. 彭立勋——华为云数…

    数据库 2023年6月11日
    093
  • spring内嵌cglib包,这里藏着一个大坑

    问题发现 2022-01-21 早上 9 点,订单系统出现大面积的”系统未知错误”报错,导致部分用户无法正常下单。查询后台日志,可以看到大量的 duplic…

    数据库 2023年6月6日
    0112
  • Mysql 实现数据库读写分离

    一、Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、…

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