设计模式笔记——建造者模式

设计模式(创建型)—— 建造者模式

这是一个学生类,它有四个属性,通过构造方法创建它的对象,我们需要填入四个参数,这就导致创建对象的代码有点长(如果他有更多属性时,那会更加恐怖),这看起来不太优雅

public class Student {public int id;public int age;public int grade;public String name;public Student(int id, int age, int grade, String name) {this.id = id;this.age = age;this.grade = grade;this.name = name;}
}

在之前,我们学习过通过StringBuilder来创建一个字符串,它就像一个建造者,可以这个字符串对象中不断添加、删除、修改,最终得到一个字符串对象,参考这种方法,我们是不是也可以设计一个创建学生对象的建造者(学生类的内部类)

public static class StudentBuilder {int id;int age;int grade;String name;public StudentBuilder id(int id) {this.id = id;return this;}public StudentBuilder age(int age) {this.age = age;return this;}public StudentBuilder grade(int grade) {this.grade = grade;return this;}public StudentBuilder name(String name) {this.name = name;return this;}public Student build() {return new Student(id, age, grade, name);}}

通过一个静态方法,来获取建造者对象

 //获取建造者
public static StudentBuilder builder() {return new StudentBuilder();
}

这样一来,我们就可以通过这样一种方式得到一个对象

Student student = Student.builder().id(1).age(16).grade(9).name("张三").build();
System.out.println(student);

这看起来优雅多了,当然如果这个类只有两三个简单的属性,我们依然可以采用最原始的构造方法来创建,建造者模式的优雅在属性特别多时才能很好的体现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

赋能中国制造,大道云行发布智能制造分布式存储解决方案

《中国制造2025》指出,“制造业是国民经济的主体,是立国之本、兴国之器、强国之基。” 智能制造引领产业提质增效 智能制造是一种利用先进的信息技术、自动化技术和智能技术来优化和升级制造业生产过程的方法。它将人工智能、大数据、物联网、机器学习等…

算法竞赛STL:map的使用方法

算法竞赛STL:map的使用方法 map 容器描述: map是一种关联容器,它存储的元素是键值对,键和值可以是任意类型。map内部的元素按照键的顺序进行排序,排序的规则由比较函数决定。 使用方法: 首先&#xff0c…

【扩散模型系列2】DiT 《Scalable Diffusion Models with Transformers》论文阅读

文章目录 摘要1. 前言2. 相关工作TransformersDDPMs架构复杂度 3. 扩散Transformer3.1 准备知识扩散公式Classifier-free GuidanceLDMs 3.2. Diffusion Transformer Design SpacePatch化DiT模块设计模型大小Transformer Decoder 4. 实验设置训练扩散评估指标计算 5. 实验DiT bl…

【前端】登陆页面:记住密码、设置cookie、加密

将保存在cookie中的密码自动填入表单:库js-cookie // login.vue getCookie() {const username Cookies.get("username");const password Cookies.get("password");const rememberMe Cookies.get(rememberMe)this.loginForm {username: use…

Material UI 5 学习01-按钮组件

Material UI 5 学习01-按钮组件 一、安装Material UI二、 组件1、Button组件1、基础按钮2、variant属性3、禁用按钮4、可跳转的按钮5、disableElevation属性6、按钮的点击事件onClick 2、Button按钮的颜色和尺寸1、Button按钮的颜色2、按钮自定义颜色3、Button按钮的尺寸 3、图…

MacOS包管理工具homebrew使用教程

MacOS包管理工具homebrew使用教程 1.概述与安装2.基本使用3.其他常用命令 1.概述与安装 homebrew是Mac OS X上的强大的包管理工具,可以高效管理各种软件包 安装: 1、安装xcode: xcode-select --install2、一行命令下载: /bin…

DreamTalk:单张图像即可生成逼真人物说话头像动画,助力AI数字人落地

“DreamTalk: When Expressive Talking Head Generation Meets Diffusion Probabilistic Models” DreamTalk是一个基于扩散的音频驱动的富有表现力的说话头生成框架,可以生成不同说话风格的高质量的说话头视频。DreamTalk对各种输入表现出强大的性能,包…

Thingsboard本地源码部署教程

本章将介绍ThingsBoard的本地环境搭建,以及源码的编译安装。本机环境:jdk11、maven 3.6.2、node v12.18.2、idea 2023.1、redis 6.2 环境安装 开发环境要求: Jdk 11 版本 ;Postgresql 9 以上;Maven 3.6 以上&#xf…

vue实现循环滚动列表

本文章使用 vue-seamless-scroll 为大家分享了vue实现循环滚动列表的具体代码,供大家参考,具体内容如下: vue实现循环滚动列表 1.安装插件 vue-seamless-scroll vue-seamless-scroll 实例文档 npm install vue-seamless-scroll --save 2.HTM…

代码随想录算法训练营Day50 | 123.买卖股票的最佳时机 III、188.买卖股票的最佳时机 IV

123.买卖股票的最佳时机 III 思路与 121.买卖股票I 一脉相承,一次买卖有2种状态(持有/不持有),那么两次买卖就有4种状态(第一次持有/不持有、第二次持有/不持有) 1、DP数组定义: dp[i][j]为当前…

【Java】Base理论的核心思想和理论三要素

目录 简介 BASE 理论的核心思想 BASE 理论三要素 1. 基本可用 2. 软状态 3. 最终一致性 总结 简介 BASE 是 Basically Available(基本可用) 、Soft-state(软状态) 和 Eventually Consistent(最终一致性&#xf…

深度强化学习系列【2】- 贝尔曼方程和马尔可夫决策过程

引言: 一直想做点强化学习相关的内容,但是对于其原理一直不是太明了,相比于编程实现,懂得算法部分的机理与理论也是至关重要的。网上找的一些资料都在强调贝尔曼方程和马尔可夫决策过程在强化学习中的作用,但是介绍都不够充分。 另外,在知乎【1】上看到一个说法,说 强化学…

财报解读:基本盘稳定后,联想如何进一步抢占AI时代?

从2021年下半年开始,受诸多因素影响,消费电子行业始终处在承压状态,“不景气”这一关键词屡次被市场提及。 但寒气没有持续,可以看到,消费电子行业正在逐渐回暖。国金证券在今年1月的研报中就指出,从多方面…

【简单模拟】第十一届蓝桥杯省赛第二场C++ B组 / C组《成绩统计》(c++)

1.题目说明 小蓝给学生们组织了一场考试,卷面总分为100 分,每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分,则称为及格。 如果得分至少为 85 分,则称为优秀。 请计算及格率和优秀率,用百分数表示…

#WEB前端(CCS常用属性,补充span、div)

1.实验: 复合元素、行内元素、块内元素、行内块元素 2.IDE:VSCODE 3.记录: span为行内元素:不可设置宽高,实际占用控件决定分布空间。 div为块内元素:占满整行,可以设置宽高 img为行内块元…

Unity(第二十三部)导航

你可以使用 unity官方提供的 unity导航组件或第三方 unity导航组件,以实现游戏中角色或其他物体的导航。 unity导航组件通常具有多种导航模式,如飞行模式、步行模式、车辆模式等,可以根据不同的需求选择合适的模式。同时,unity导…

2023年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待…

2023年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待… 武汉唯众智创科技有限公司 2024 年 2 月 联系人:辜渝傧13037102709 题号:试题01 模块二:数据获取与处理 (一)…

Ainx的全局配置

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于Ainx系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基础系列…

js中的闭包

理解 函数内部可以访问其外函数中的作用域 作用 创建私有变量延长变量的声明周期一般函数中的变量在函数返回之后就会被销毁,但是闭包会保存使用的变量,即便是上下文被摧毁了,使用的变量依旧存在 闭包的用途 柯里化函数的目的就是在避免重复的调用变量案例 求一个长方形的…

ROS2 Python环境变量PYTHONPATH设置

文章目录 引题解决方法方法一 将三方库与pkg放在一起方法二 将三方库放入pythonpath目录 引题 ROS2在执行ros2 pkg create --build-type ament_python **创建python包时,有时候会涉及外部库的导入,这里讲解一下如何配置PYTHONPATH变量让程序顺利找到外部…