一句话设计模式10:建造者模式

news/2024/5/22 5:25:22/文章来源:https://blog.csdn.net/qq_32419139/article/details/129859018

建造者模式: 一步一步建造一个对象;


文章目录

  • 建造者模式: 一步一步建造一个对象;
  • 前言
  • 一、建造者模式的作用
  • 二、如何实现建造者模式
    • 第一种: 改写set方法
    • 第二种: 直接使用lombok 的 @Builder
  • 总结


前言

建造者模式一般使用场景是: 一个复杂的对象创建过程,分步骤执行,一步一步完成创建,最终创建一个复杂的大对象;


一、建造者模式的作用

使复杂的大对象的创建,变为一步一步的属性的赋值,从而在创建上不那么复杂,使用建造者之后,代码也更佳统一简洁;

二、如何实现建造者模式

第一种: 改写set方法

具体类如下:

@ToString
public class PeopleBean {private String name;private String address;private Double height;private Double money;private Integer age;public String getName() {return name;}public PeopleBean setName(String name) {this.name = name;return this;}public String getAddress() {return address;}public PeopleBean setAddress(String address) {this.address = address;return this;}public Double getHeight() {return height;}public PeopleBean setHeight(Double height) {this.height = height;return this;}public Double getMoney() {return money;}public PeopleBean setMoney(Double money) {this.money = money;return this;}public Integer getAge() {return age;}public PeopleBean setAge(Integer age) {this.age = age;return this;}
}

@ToString lombok 的注解,仅仅是为了打印方便
一个对象新增所有属性的set/get方法之后,改写set方法为有返回值,返回为当前对象,然后 return this;
这样就相当于每次set 返回的都是当前对象,然后每个set仅仅是构造了对象的一个属性,或者一部分属性

搞个测试类,看下建造者模式的效果;

public class TestBuilder {public static void main(String[] args) {PeopleBean peopleBean = new PeopleBean().setName("小明").setAge(1).setAddress("哈哈").setHeight(1.45).setMoney(100.00);System.out.println(peopleBean);}
}

结果

第二种: 直接使用lombok 的 @Builder

之前的对象改为如下:

@ToString
@Builder
@Data
public class PeopleBean {private String name;private String address;private Double height;private Double money;private Integer age;
}

这里的@Builder 可以理解为之前改写set那种

直接测试,看结果

public class TestBuilder {public static void main(String[] args) {PeopleBean peopleBean = PeopleBean.builder().name("小明").age(1).address("哈哈").height(1.45).money(100.00).build();System.out.println(peopleBean);}
}

打印结果

总结

其实建造者模式,对于之前来说可能确实是个分步构建一个复杂对象的优秀方法,但是现在有了lombok,说实话我觉得这种设计模式已经名存实亡了;
除非真的是那种复杂的对象创建,且有业务逻辑,那确实需要自己去改写set方法,然后返回 this 那样去处理;

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

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

相关文章

【开源项目】消息推送平台austin介绍

项目介绍 核心功能:统一的接口发送各种类型消息,对消息生命周期全链路追踪。 意义:只要公司内部有发送消息的需求,都应该要有类似austin的项目。消息推送平台对各类消息进行统一发送处理,这有利于对功能的收拢&#…

【LeetCode每日一题:2367. 算术三元组的数目:暴力模拟+Hash表】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…

windows下切换PHP-cli版本

概念: PHP-cli是PHP Command Line Interface的缩写,指的是PHP的命令行界面。它是PHP语言中的一种执行方式,可以在命令行下运行PHP程序,而不需要通过Web服务器或浏览器来执行。 PHP-cli可以用于很多场景,比如&#xf…

Spark—idea

ideal—Spark新建工程新建maven工程,添加scala添加依赖pom添加依赖并下载 spark-core重复步骤下载spark-sqlspark-hivespark-graphxmysql-connector-java安装完成新建SparkDemo的scala objectsc对象可能会出现报错,参考这位老哥的解决办法wordcount打架包…

快递的旅行日记 - 深度挖掘快递物流地图轨迹查询API 的使用场景

写在前面 全球化经济的不断发展使得快递业变得越来越重要,而快递物流地图轨迹查询 API 也因此应运而生。 该 API 可以帮助用户追踪物流信息,了解快递的运输状态,方便快递企业、个人用户以及电商平台等多方面的需求。 快递物流地图轨迹查询 …

Matlab进阶绘图第13期—带填充纹理的堆叠图

带填充纹理的堆叠图是通过在原始堆叠图的基础上添加不同的纹理得到的,可以很好地解决由于颜色区分不够而导致的对象识别困难问题。 由于Matlab中未收录提供填充纹理选项,因此需要大家自行设法解决。 本文使用hatchfill2工具(Kesh Ikuma. Ma…

JVM 字符串常量池(StringTable)

String的基本特性 String:字符串,使用一对 “” 引起来表示String s1 "hello" ; // 字面量的定义方式String s2 new String("hello"); // new 对象的方式 String被声明为final的,不可被继承 String实现了…

【新股打新】北森控股:发行比例只有区区1%,这是要作妖的前奏?

一、公司简介 北森控股,成立于2002年,是国内领先的人力资源管理的高科技公司,旗下的一体化HR SaaS及人才管理平台 —— iTalentX,覆盖了企业招聘、入职、管理到离职的全生命周期的数字化管理,帮助企业快速提升人力资源…

玄子Share-BCSP助学手册之数据库开发(已优化)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NIr0tYNc-1680505151717)(./assets/XuanZiShare_QQ_3336392096.jpg)] 玄子Share-BCSP助学手册之数据库开发 前言: 此文为玄子,学习 BCSP 一二期后整理的文章,文中对…

Vivado中如何修改IP源文件

前一篇文章是通过改变JESD204B IP的设置,在Shared Logic里勾选in example design,来避免共用输入时钟的问题。那么还有没有别的办法呢?有没有更直接点的实现方式呢? 答案是肯定的:可以直接修改IP,将IBUFDS…

开心档之开发入门网-C++ 变量类型

C 变量类型 目录 C 变量类型 C 中的变量定义 C 中的变量声明 实例 实例 C 中的左值(Lvalues)和右值(Rvalues) 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型,类型决定了变量存储的大小…

合宙Air780E|ScreenStream|图传|LuatOS-SOC接口|学习(23):4G远程遥控小车(2)-图传设置及解析

目录 基础资料 原项目地址 实现功能: 前文: 图传设置及解析 概述 提示 软件亮点 操作步骤 4G小车控制前端相关代码 图传显示函数: 按钮及显示框 待解决问题:小车图传前端不能正常显示 基础资料 ​ 基于Air780E开发板&…

「Python 机器学习」Matplotlib 数据探索

Matplotlib 是一个 Python 的数据可视化库,它能够轻松创建各种类型的图表和图形;Matplotlib 可以在 Jupyter Notebooks、交互式应用程序和脚本中使用,并支持多种绘图样式和格式; Matplotlib 最初是为科学计算而设计的&#xff0c…

【观察】诺基亚贝尔品牌焕新传递新价值,以无线专网加速中国数字化进程

今年2月底,在西班牙巴塞罗那举行的2023年世界移动通信大会上,诺基亚宣布重塑企业战略和技术战略,同时推出全新企业品牌形象,这标志着诺基亚在长期战略转型之路上迈出了坚实的一步。而作为诺基亚在华独家运营实体,诺基亚…

pdf格式可以编辑吗?提供几个思路

PDF格式文件常常用于共享文档和保护文档内容,但是很多人都会遇到一个问题:PDF格式文件是否可编辑? 答案是肯定的,PDF格式文件是可以编辑的。虽然PDF格式文件的初衷是为了保护文档内容,但是现在很多软件已经支持PDF格式…

【OJ比赛日历】快周末了,不来一场比赛吗? #04.01-04.07 #14场

CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号同时会推送最新的比赛消息,欢迎关注!更多比赛信息见 CompHub主页 或 点击文末阅读原文以下信息仅供参考,以比赛官网为准目录2023-04-01&…

Android OKHttp源码解析

Https是Http协议加上下一层的SSL/TSL协议组成的,TSL是SSL的后继版本,差别很小,可以理解为一个东西。进行Https连接时,会先进行TSL的握手,完成证书认证操作,产生对称加密的公钥、加密套件等参数。之后就可以…

【人工智能】—局部搜索算法、爬山法、模拟退火、局部剪枝、遗传算法

Local search algorithms (局部搜索算法)局部搜索算法内存限制局部搜索算法示例:n-皇后爬山算法随机重启爬山模拟退火算法局部剪枝搜索遗传算法小结局部搜索算法 在某些规模太大的问题状态空间内,A*往往不够用 问题空间太大了无法…

InVEST模型

详情点击链接:invest模型 生态系统服务理论联系实践案例InVEST模型的开发历程、不同版本的差异及对数据需求InVEST所需数据的要求(分辨率、格式、投影系统等)、获取及标准化预处理InVEST运行常见问题及处理解决方法ArcGIS工具支撑InVEST模型…

PropertySourceLocator(SpringCloud中的配置操作)

又是美好的一天呀~ 个人博客地址: huanghong.top 往下看看~内容简介源码分析prepareContextapplyInitializersPropertySourceBootstrapConfiguration#initializelocateCollectionNacos示例insertPropertySourcesConfigurationPropertiespostProcessBeforeInitializa…