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();@Overridepublic void buildProductA() {product.setProductA("产品A");}@Overridepublic void buildProductB() {product.setProductB ("产品B");}@Overridepublic 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、结果展示:

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

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

相关文章

零基础入门GIS开发,必看实用教程【附智慧校园实战笔记源码】

GIS开发也叫webgis,web就是指网页端,所以GIS开发大部分情况下是指网页端的地图可视化开发。 因此GIS开发需要学习前端开发HTML/CSS/JS,以及一些常见的前端框架,例如vue和react等(新中地教育通常是教vue,其…

ssm三农产品助推网站-计算机毕业设计源码91990

目录 摘要 1 绪论 1.1选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2网站分析 2.1 可行性分析 2.2 网站流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 网站功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 网站用例分析 2.5本章小结 3 网站总体设…

这次发现的开源版本我愿意称之为最具学习价值的商城系统|商城源码点击进入

这是一款我发现的强大、灵活、易用的商城系统,成为我的的首选商城框架,让我的商城开发事半功倍!这款开源商城项目具有多元的商业模式满足了任何使用场景的需求。 有S2B2C供应链商城、B2B2C多商户商城、O2O外卖商城、B2C单商户商城、社区团购、…

Hive查询优化 - 面试工作不走弯路

引言:Hive作为一种基于Hadoop的数据仓库工具,广泛应用于大数据分析。然而,由于其依赖于MapReduce框架,查询的性能可能会受到影响。为了确保Hive查询能够高效运行,掌握查询优化技巧至关重要。在日常工作中,高…

Python入门 2024/7/3

目录 for循环的基础语法 遍历字符串 练习:数一数有几个a range语句 三个语法 语法1 语法2 语法3 练习:有几个偶数 变量作用域 for循环的嵌套使用 打印九九乘法表 发工资案例 continue和break语句 函数的基础定义语法 函数声明 函数调用 …

使用CiteSpace软件对知网文献进行关键词共现/聚类/突现分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

前端进阶全栈计划:Spring扫盲

Spring扫盲 spring 和 springboot的关系? 类比前端:vue.js和nuxt.js的关系 Spring Boot 是基于 Spring 框架的快速开发工具,简化了 Spring 应用的配置和部署。 spring核心特性 1. 依赖注入 依赖注入是Spring框架的核心功能之一。它允许你通过配置将对…

Windows系统安装MySQL8.0.38

MySQL 8.0 相对于 MySQL 5.7 来说有几个显著的区别和改进,以下是一些主要的区别: JSON 数据类型和函数改进: MySQL 8.0 引入了更多的 JSON 支持,包括 JSON 数据类型、JSON 函数和操作符。这使得存储和查询 JSON 数据更加方便和高效…

从头开始构建 RAG 的 LLM 代理:综合指南

GPT-3、GPT-4 等 LLM 及其开源版本经常难以检索最新信息,有时会产生幻觉或不正确的信息。 检索增强生成 (RAG)是一种将 LLM 的强大功能与外部知识检索相结合的技术。RAG 使我们能够将 LLM 响应建立在事实、最新的信息之上,从而显著提高 AI 生成内容的准…

还敢乱买智能猫砂盆?今天扒一扒糯雪、鸟语花香、CEWEY智能猫砂盆!

在这高科技迅速发展的时代,连猫咪用来拉屎的屎盆子也变成了全自动化,从普通的猫砂盆变成了智能猫砂盆,让铲屎官再也不用每天赶回家铲屎给猫整理烂摊子,实在是非常轻松。所以那个时候的我也果断扔掉了家里的猫砂盆,转而…

电子电路学习笔记(4)三极管

部分内容参考链接: 电子电路学习笔记(5)——三极管_三极管 箭头-CSDN博客 模拟电子技术基础笔记(4)——晶体三极管_集电结的单向导电性-CSDN博客 硬件基本功-36-三极管Ib电流如何控制Ic电流_哔哩哔哩_bilibili MOS…

使用DC/AC电源模块时需要注意的事项

BOSHIDA 使用DC/AC电源模块时需要注意的事项 1. 仔细阅读和理解产品说明书:在使用DC/AC电源模块之前,应该仔细阅读和理解产品说明书,了解其性能特点、技术要求和使用方法,以确保正确使用和避免潜在的安全风险。 2. 选择适当的电…

源代码编译安装LAMP

Apache简介 主要特点 开放源代码,跨平台应用 支持多种网页编程程序 模块化设计,运行稳定,良好得安全性 软件版本 1.X 目前最高版本是1.3,运行稳定 向下兼容性较好,但缺乏一些较新得功能 2.X 目前最高版本是2.4 …

PDF处理篇:如何调整 PDF 图像的大小

将视觉效果无缝集成到 PDF 中的能力使它们成为强大的通信工具。然而,笨拙的图像大小会迅速扰乱文档的流程,阻碍清晰度和专业性。幸运的是,GeekerPDF 和Adobe Acrobat等流行的应用程序提供了用户友好的解决方案来应对这一挑战。这个全面的指南…

Google 发布了最新的开源大模型 Gemma 2,本地快速部署和体验

Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模:90 亿(9B)参数和 270 亿(27B)参数,分别具有基础(预训练)和指令调优版本,拥有 8K Tokens 的上下文长度&#…

Vue3 特点以及优势-源码解剖

Vue3 特点以及优势-Vue3.4源码解剖 Vue3 特点以及优势 1.声明式框架 命令式和声明式区别 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程声明式框架更加关注结果。命令式的代码封装到了 Vuejs 中,过程靠 vuejs 来实现 声明式代…

关于 VuePress 的插件

插件就好比第三方功能,例如增加一个阅读进度条、增加光标效果等。VuePress 官网对插件的介绍:插件通常会为 VuePress 添加全局功能。 这里简单介绍几个本站用的插件吧! ‍ ‍ 插件就好比第三方功能,例如增加一个阅读进度条、增…

如何实现在短信链接中直接打开微信小程序

你是否有过这样的体验,收到一条短信,里面有一个链接,点击后就直接打开了微信,并且进入了一个小程序。这种神奇的功能是如何实现的呢?本文将为你揭晓答案。 利用微信URL Link 接口生成链接 要实现短信中的链接直接打开…

VSG虚拟同步发电机simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 VSG虚拟同步发电机simulink建模与仿真,虚拟同步发电机(Virtual Synchronous Generator, VSG)技术是电力电子领域的一项重要创新&#xff0c…

Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire

一、前言 线上项目往往依赖非常多的具备特定能力的资源,如:DB、MQ、各种中间件,以及随着项目业务的复杂化,单一项目内,业务模块也逐渐增多,如何高效、整洁管理各种资源十分重要。 本文从“术”层面&#…