java设计模式(五)建造者模式(Builder Pattern)

1、模式介绍:

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了创建细节。该模式将对象的构建过程和表示分离,使得相同的构建过程可以创建不同的表示。

2、应用场景:

创建复杂对象:当需要创建的对象具有复杂的内部结构或需要进行多个步骤的构建时,可以使用建造者模式。
避免构造器参数过多:如果类的构造函数参数过多,可以使用建造者模式构建不同的属性。
创建不同的表示:在不同的情况下,可以通过相同的构建过程创建不同的对象表示。

3、优点:

封装性好:客户端不需要知道产品内部的构建细节,只需关心建造者的接口和产品的组装过程。
灵活性好:可以根据需求选择构建不同的产品。
扩展性好:增加新的建造者无需修改原有代码,符合开闭原则。

4、缺点:

增加了对象的数量:引入了建造者模式后,会增加对象的数量,可能会增加系统的复杂度。
构建过程复杂:对于简单的对象,引入建造者模式可能会增加不必要的复杂性。

5、代码实现:

/**
 * 产品类
 *
 * @author FM_南风
 * @date 2024/6/23
 */
@Data
public class Product {
 private String productA;
 private String productB;

 public void show() {
  System.out.println("productA: " + productA);
  System.out.println("productB: " + productB);
 }

}


/**
 *  抽象建造者
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public interface Builder {
 void buildProductA();
 void buildProductB();
 Product getResult();
}

/**
 * 具体建造者
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public class ConcreteBuilder implements Builder {
 private Product product = new Product();
 @Override
 public void buildProductA() {
  product.setProductA("产品A");
 }

 @Override
 public void buildProductB() {
  product.setProductB ("产品B");
 }

 @Override
 public Product getResult() {
  return product;
 }
}

/**
 * 指挥者
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public class Director {
 public Product construct(Builder builder) {
  builder.buildProductA();
  builder.buildProductB();
  return builder.getResult();
 }

}


/**
 * 应用
 *
 * @author FM_南风
 * @date 2024/6/23
 */
public class BuilderClient {
 public static void main(String[] args) {
  Director director = new Director();
  Builder builder = new ConcreteBuilder();

  Product product = director.construct(builder);
  product.show();
 }
}

6、结果展示:

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

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

相关文章

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告 哈喽小伙伴们好,我是Stark-C~ 对于入手PS5的游戏玩家来说,机器到手第一步,那就是订阅索尼PlayStation Plus会员,可以尽情的玩耍上百款游戏3A大作&#xf…

web刷题记录

[HDCTF 2023]SearchMaster 打开环境,首先的提示信息就是告诉我们,可以用post传参的方式来传入参数data 首先考虑的还是rce,但是这里发现,不管输入那种命令,它都会直接显示在中间的那一小行里面,而实际的命令…

L59---101.对称二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 (1)根节点为空: 如果根节点为空,树是对称的。 (2)递归检查: isMirror 方法递归检查两个子树是否是镜像对称的。 (3)辅助函数 isMirror: 1)如果两个节点都为空,它们是镜像对称的…

Java中特殊文件和日志技术

特殊文件和日志技术 特殊文件:Properties属性文件 特点: 特点一:都是键值对 特点二:键不能重复 特点三:文件后缀一般是Properties 作用: …

涵盖多项功能的文件外发系统,了解一下

伴随着业务范围的不断扩大,信息化的迅速发展,企业与客户、供应商等合作伙伴之间的文件交换也愈加频繁,尤其涉及到核心数据,像核心技术、设计图纸等敏感数据,对其的保护也是越发重视。文件外发系统,应运而生…

2024年河北省特岗教师报名流程详细图解

最近有很多学员们问特岗教师具体的报名流程 给大家安排! 特岗报名步骤 第步: 电脑搜索“河北特岗招聘”登录进行注册 第步:注册后重新登录 第步: 根据个人情况选择填写自己的学历 第步:填写个人信息 (需要上传的电子版的照片、普通话证、学历证书、教资证等) 第步:选择岗位报名…

【大数据技术原理与应用(概念、存储、处理、分析与应用)】第2章-大数据处理架构 Hadoop习题与知识回顾

文章目录 单选题多选题知识点回顾什么是Hadoop?Hadoop有哪些特性?Hadoop生态系统是怎么样的?(1) HDFS(2) HBase(3) MapReduce(4) Hive(5) Pig(6) Mahout(7) Zookeeper(8) Flume(9) Sqoop(10) Ambari 单选题 1、下列哪个不属于Hadoop的特性&am…

MySQL索引优化解决方案--索引优化(4)

排序优化 尽量避免使用Using FileSort方式排序。order by语句使用索引最左前列或使用where子句与order by子句条件组合满足索引最左前列。where子句中如果出现索引范围查询会导致order by索引失效。 优化案例 联表查询优化 分组查询优化 慢查询日志

2024年上半年软件设计师上午真题及答案解析

1.在计算机网络协议五层体系结构中,( B )工作在数据链路层。 A.路由器 B.以太网交换机 C.防火墙 D.集线器 网络层:路由器、防火墙 数据链路层:交换机、网桥 物理层:中继器、集线器 2.软件交付之后&#xff…

C++ | Leetcode C++题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int n dungeon.size(), m dungeon[0].size();vector<vector<int>> dp(n 1, vector<int>(m 1, INT_MAX));dp[n][m …

并发编程-04synchronized原理

并发编程-04synchronized原理 一 synchronized基础 1.1 并发安全问题 在学习synchronized原理之前&#xff0c;我们先要了解synchronized是干嘛用的&#xff0c;什么场景下需要使用它&#xff0c;以及它的使用方式有哪些&#xff1f;接下来我们去根据一个业务场景去了解下sy…

如何高效利用iCloud指南

苹果公司提供的iCloud服务是一个强大的云平台&#xff0c;它不仅允许存储数据&#xff0c;还支持跨设备的无缝同步和备份。通过充分利用iCloud&#xff0c;用户可以在多个设备上高效地访问和管理工作文件、照片、应用程序数据等等。具体分析如下&#xff1a; iCloud基础了解和配…

mysql workbench使用schema视图导出表和列结构到excel

目的&#xff1a;导出所有表和列的名字和注释 很多时候没有正规的数据库文档&#xff0c;为了快速交流啊&#xff0c;需要一个快捷的基础。数据库建表的时候可能有注释&#xff0c;也可能没有注释。有当然好&#xff0c;查看注释就能清楚很多&#xff0c;没有的话最好一个一个补…

这表单时而能使,时而不能使【debug】

项目地址&#xff1a;StrongBySteps-GitHub(一个学习记录与时间管理系统。) 这表单时而能使&#xff0c;时而不能使 在没有填写“绑定子任务”时&#xff0c;修改计划用时&#xff0c;比如我填写的是10。显示修改成功&#xff0c;但实际上并没有修改&#xff08;还是5&#xf…

单体架构改造为微服务架构之痛点解析

1.微服务职责划分之痛 1.1 痛点描述 微服务的难点在于无法对一些特定职责进行清晰划分&#xff0c;比如某个特定职责应该归属于服务A还是服务B? 1.2 为服务划分原则的痛点 1.2.1 根据存放主要数据的服务所在进行划分 比如一个能根据商品ID找出商品信息的接口&#xff0c;把…

Web应用和Tomcat的集成鉴权1-BasicAuthentication

作者:私语茶馆 1.Web应用与Tomcat的集成式鉴权 Web应用部署在Tomcat时,一般有三层鉴权: (1)操作系统鉴权 (2)Tomcat容器层鉴权 (3)应用层鉴权 操作系统层鉴权包括但不限于:Tomcat可以和Windows的域鉴权集成,这个适合企业级的统一管理。也可以在Tomcat和应用层独立…

图神经网络实战(15)——SEAL链接预测算法

图神经网络实战&#xff08;15&#xff09;——SEAL链接预测算法 0. 前言1. SEAL 框架1.1 基本原理1.2 算法流程 2. 实现 SEAL 框架2.1 数据预处理2.2 模型构建与训练 小结系列链接 0. 前言 我们已经学习了基于节点嵌入的链接预测算法&#xff0c;这种方法通过学习相关的节点嵌…

Open AI 前 Superalignment部门研究员Leopold Aschenbrenner的关于Superintelligence担忧的真挚长文

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

JavaWeb——MySQL:DDL

目录 3.DDL&#xff1a;查询 ​编辑3.4 分组查询&#xff08;group by&#xff09; 3.4.1 什么是分组查询 3.4.2 聚合函数 3.4.3 分组查询 3.4.5 总结 3.DDL&#xff1a;查询 查询是使用最多、最频繁的操作&#xff0c;因为前面的修改以及删除&#xff0c;一般会交给数据库…

spring原理篇

第三方bean默认为方法名 自动配置 自动配置的原理 springboot的自动配置原理 首先是从 SpringBootApplication这个注解出发 有一个ComponentScan()默认扫描同级包及其子包 第二个注解是springbootconfiguration 声明当前类是一个配置类 第三个是核心 enableAutoConfigurati…