建造者设计模式

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

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

(0)

大家都在看

  • 蓝桥杯——校内模拟题目分析

    蓝桥杯——校 内模拟题目分析 (顺序有可能会有点乱,不要信上面填的答案,看解析,后面附有答案) 1 这道题就不用多说了吧,计算机的单位之间进制为2 的10 次方 所以答案为: 15…

    Java 2023年6月5日
    073
  • JavaScript的原型模式

    JavaScript的原型模式 一、函数的prototype 属性 在我们创建的每个函数中,都有一个prototype(原型)属性,这个属性是一个对象,它的用途是来包含可以由特定类…

    Java 2023年6月8日
    073
  • SpringBoot集成thymeleaf模板

    1.在pom文件添加: org.springframework.boot spring-boot-starter-thymeleaf2.在html页面的头部添加 3.在java C…

    Java 2023年6月14日
    067
  • IDEA插件和个性化配置推荐

    插件推荐 我自己现在使用的一些插件和一些自己感觉比较舒服配置分析给大家 idea如何安装插件: 如果打开设置没有看到,直接搜索plugins 然后在这里搜索即可 CodeGlanc…

    Java 2023年6月6日
    0101
  • day11-多线程

    进程、线程介绍 Java中 线程的实现方式 Thread 类 Runnable 接口 Callable 接口 线程相关的方法 线程安全问题 – 同步技术 线程等待唤醒机…

    Java 2023年6月6日
    098
  • MySQL索引凭什么能让查询效率提高这么多?

    我相信大家在数据库优化的时候都会说到索引,我也不例外,大家也基本上能对数据结构的优化回答个一二三,以及页缓存之类的都能扯上几句,但是有一次阿里P9的一个面试问我:你能从计算机层面开…

    Java 2023年6月9日
    0149
  • es篇-es基础

    点赞再看,养成习惯,微信搜索「 小大白日志」关注这个搬砖人。 文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。 es和solr一样,都是基于Lucene的全文检索…

    Java 2023年6月8日
    081
  • java入门基础 static final 关键字 修饰符 解释(通俗易懂)

    final 和 static和 final static 区别解释? static是用来修饰静态资源的(包括类、方法、变量等),final 是用来保证当前变量为常量,final s…

    Java 2023年6月7日
    086
  • Oracle数据库备份/导出(exp/expd)、导入(imp/impd)

    ​ 常用的oracle数据库备份(导入/导出)有两种,分别是exp/imp和expd/impd,前者是Orace早期版本带有的导入导出工具,后者是Oracle10g后出现的,下面进…

    Java 2023年6月8日
    089
  • Java全家桶的这些知识,不用学了

    众所周知,Java 的知识体系繁冗复杂,但是有很多知识在实际工作中几乎没有人用。 很多人在学习过程中,却经常把有限的时间和精力花在了这些” 没有用“的知识上…

    Java 2023年6月7日
    065
  • 前端(Css学习) 2

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言…

    Java 2023年6月5日
    087
  • Moriis神级遍历!

    Moriis 遍历 Morris 遍历是二叉树遍历的一种方式,传统的递归和非递归遍历的时间复杂的都是O(N),空间复杂度都是O(h)(h为树的高度),而 Morris 遍历可以做到…

    Java 2023年6月8日
    094
  • 手把手教你如何高效落地单项目管理 | 一看既会

    在日常工作中使用协作工具你可能会遇到这些问题: 1.需求关联的代码已经发布了,但是状态还停留在待处理 2.这部分工作有固定接口人,但是每次我还要手动指定到这个人负责。 3.我负责的…

    Java 2023年6月8日
    081
  • 微服务入门之Gateway

    一、简介 1、zuul 和 gateway的缘起 zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器,提供动态路由、监视、弹性、安全性等功能的边缘服务。在gate…

    Java 2023年6月9日
    082
  • Java的虚拟线程(协程)特性开启预览阶段,多线程开发的难度将大大降低

    高并发、多线程一直是 Java编程中的难点,也是面试题中的要点。 Java开发者也一直在尝试使用多线程来解决应用服务器的并发问题。但是多线程并不容易,为此一个新的技术出现了,这就是…

    Java 2023年5月29日
    078
  • Java SE 2、抽象类

    用abstract关键字来修饰一个类时,这个类就是抽象类 ​ 访问修饰符 abstract 类名 { ​ } 用abstract关键字来修饰一个方法时,这个方法就是抽象方法 ​ 访…

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