Java 中建造者模式,请用代码具体举例

建造者模式是一种创建型设计模式,它允许你创建一个复杂对象的不同部分并将它们组装在一起,以产生最终的对象。以下是一个简单的 Java 示例,演示了建造者模式的用法:


// 产品类
class Computer {private String cpu;private String ram;private String storage;private String gpu;public void setCpu(String cpu) {this.cpu = cpu;}public void setRam(String ram) {this.ram = ram;}public void setStorage(String storage) {this.storage = storage;}public void setGpu(String gpu) {this.gpu = gpu;}@Overridepublic String toString() {return "Computer{" +"cpu='" + cpu + '\'' +", ram='" + ram + '\'' +", storage='" + storage + '\'' +", gpu='" + gpu + '\'' +'}';}
}// 抽象建造者
interface ComputerBuilder {void buildCPU();void buildRAM();void buildStorage();void buildGPU();Computer getComputer();
}// 具体建造者
class HighEndComputerBuilder implements ComputerBuilder {private Computer computer;public HighEndComputerBuilder() {computer = new Computer();}public void buildCPU() {computer.setCpu("Intel Core i9");}public void buildRAM() {computer.setRam("32GB DDR4");}public void buildStorage() {computer.setStorage("1TB SSD");}public void buildGPU() {computer.setGpu("NVIDIA GeForce RTX 3080");}public Computer getComputer() {return computer;}
}// 指挥者
class Director {private ComputerBuilder computerBuilder;public void setComputerBuilder(ComputerBuilder computerBuilder) {this.computerBuilder = computerBuilder;}public Computer buildComputer() {computerBuilder.buildCPU();computerBuilder.buildRAM();computerBuilder.buildStorage();computerBuilder.buildGPU();return computerBuilder.getComputer();}
}// 示例
public class Main {public static void main(String[] args) {Director director = new Director();ComputerBuilder highEndBuilder = new HighEndComputerBuilder();director.setComputerBuilder(highEndBuilder);Computer highEndComputer = director.buildComputer();System.out.println("High-end Computer:");System.out.println(highEndComputer);}
}

在这个例子中,Computer 类是产品类,它具有一些属性如 CPU、RAM、存储和 GPU。ComputerBuilder 接口定义了建造者的方法,包括构建 CPU、RAM、存储和 GPU。HighEndComputerBuilder 类是一个具体的建造者,负责构建高端计算机的各个部件。Director 类负责指挥建造者构建计算机,它可以接受不同的建造者来构建不同配置的计算机。
在 Main 类中,我们创建了一个指挥者和一个高端计算机的建造者,并指定给指挥者。然后指挥者使用建造者构建高端计算机,最终得到一个完整的高端计算机对象。

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

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

相关文章

JVM结构化体系

目录 目录 1.JVM 简介 1.1. 如何理解 JVM 呢? 1.2. 市场主流 JVM 分析? 1.3. 为什么要学习 JVM? 1.4. 字节码底层是如何执行呢? 如何理解 JIT 呢? 为什么 JVM 中解释执行与编译执行的并存(混合模式&…

【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

🔥个人主页:Forcible Bug Maker 🔥专栏:C 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 前言 本篇主要内容:类的6个默认成员函数中的拷贝构造函数…

el-drawer二次封装进行可拖拽

1.想要的效果 鼠标放到上面出现箭头显示可拖拽得图标 2.代码实现 2.1封装成自定义指令 // drawerDragDirective.js // 定义指令 const drawerDragDirective {// 指令绑定时的处理函数bind(el, ) {const minWidth 300;const dragDom el.querySelector(.el-drawer);// 创…

掀起区块链开发狂潮!Scaffold-eth带你一键打造震撼DApp

文章目录 前言一、Scaffold-eth是什么?二、安装和配置1.准备工作2.安装3.配置开发环境 三、进阶使用1.放入自己的合约2.部署运行 总结 前言 前面的文章传送🚪:hardhat入门 与 hardhat进阶 在之前的文章中,我们已经探讨了使用Har…

【Linux】提升Linux命令行效率:光标移动和文本操作的键盘快捷键

Just 那么年少 还那么骄傲 两眼带刀 不肯求饶 即使越来越少 即使全部都输掉 也要没心没肺地笑 Just 那么年少 我向你招手 让你看到 我混账到老 天涯海角 天荒地老 只等你摔杯为号 🎵 朴树《Forever Young》 Linux命令行界面(CLI&am…

设计模式系列:简单工厂模式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS二次开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 定义 特点 使用场景 优缺点 (1) 优点…

故障转移-redis

4.4.故障转移 集群初识状态是这样的: 其中7001、7002、7003都是master,我们计划让7002宕机。 4.4.1.自动故障转移 当集群中有一个master宕机会发生什么呢? 直接停止一个redis实例,例如7002: redis-cli -p 7002 sh…

保持微软Microsoft Teams始终在线的方案

保持微软Microsoft Teams始终在线的方案 背景方案 背景 目前使用微软Teams办公的小伙伴很多,但是长时间不操作电脑就被自动设置成离线状态。对于在电脑前学习书本或者在思考问题的小伙伴就显得不太友好,因为即使我们不操作电脑我们也时刻在电脑前&#…

定时器产生延时停止

1,需求: 当按下按钮SB1,输出信号为0N,指示灯点亮;按下按钮SB2,经过10s的延时后,指示灯熄灭 2,关闭使用定时的常闭触电

Python 如何的调试模式使用 Python 的内置调试器 pdb 或者集成开发环境(IDE)如 PyCharm、Visual Studio Code

Python 的调试模式通常是通过使用 Python 的内置调试器 pdb 或者集成开发环境(IDE)如 PyCharm、Visual Studio Code 等中的调试工具来实现的。 使用 pdb pdb 是 Python 的标准库中的一个模块,它提供了一个交互式的源代码调试器。你可以使用…

Graphql mock 方案

GraphQL API 的强类型本质非常适合模拟。模拟是 GraphQL Code-First 开发过程的重要组成部分,它使前端开发人员能够构建 UI 组件和功能,而无需等待后端实现。 我们期望基于 TS 强类型定义的特点以及中后台常见列表、详情的数据类型共性,实现…

HG泄露(ctfhub)

工具准备:dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇(内含安装以及使用方法)_dvcs-ripper-CSDN博客 dvcs-ripper:一款perl的版本控制软件信息泄露利用工具,支持bzr、cvs、git、hg、svn... tree //树状…

APP开发_Android 与 js 互相调用

1 js 调用 Android 方法 当使用 JavaScript 调用 Android 原生方法时,主要涉及到 Android 的 WebView 组件,它允许你在 Android 应用中嵌入网页内容,并提供了 JavaScript 与 Android 代码交互的能力。 (1)创建JavaSc…

项目升级到jdk21后 SpringBoot相关组件的适配

了解到jdk21是一个LTS版本,可以稳定支持协程的功能。经过调研,将目前线上的jdk8升级到21,使用协程提升并发性能。 目前系统使用springBoot 2.0.3.RELEASE,并且引入了mybatis-spring-boot-starter、spring-boot-starter-data-redi…

MySql数据库从0-1学习-第四天多表查询

多表查询,指从多张表查询数据 连接查询 内连接: 相当于查询A和B交集部分数据外连接 左外连接: 查询左表所有的数据(包括两张表交集部分的数据)有外连接: 查询右表所有的数据(包括两张表交集部分的数据) 子查询 内连接查询 隐式内连接查询 select 字段列表 from 表1,表2 whe…

聪明利用ChatGPT,让你的论文更加出色

ChatGPT无限次数:点击直达 聪明利用ChatGPT,让你的论文更加出色 引言 近年来,人工智能技术的快速发展给我们的学术研究带来了前所未有的便利。其中,自然语言处理技术中的ChatGPT模型,作为一种生成式预训练模型,为我们…

【电控笔记2.3】速度回路+系统延迟

2.3.1速度回路pi控制器设计 pi伯德图近似设计(不考虑延时理想情况下) Tl:负载转矩 PI控制器的转折频率:Ki/Kp

VScode插件发布

背景 上期在初涉 VS Code 插件开发-CSDN博客中,通过Yeoman工具创建了第一个插件项目,在helloworld的基础上修改,实现预期的功能后,需要将VScode插件发布到插件市场中使用。 官方文档:Publishing Extensions | Visual…

【C语言】带你完全理解指针(六)指针笔试题

目录 1. 2. 3. 4. 5. 6. 7. 8. 1. int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】 2,5 【解析】 定义了一个指向整数的指针ptr,并将其初始化为&…

动态规划专练( 198.打家劫舍)

198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…