当前位置: 首页 > news >正文

编程-设计模式 4:建造者模式

设计模式 4:建造者模式

定义与目的
  • 定义:建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示
  • 目的:该模式主要用于创建复杂对象时,这些对象的创建过程可能涉及多个步骤,并且可能需要不同的配置选项。建造者模式将构建过程表示分离,使得可以构建出不同配置的同一类型对象。
实现示例

假设我们要创建一个计算机对象,这个对象有很多配置选项,比如处理器、内存、硬盘等。我们可以使用建造者模式来创建不同配置的计算机实例。

// 定义产品类 - 计算机
public class Computer {// 计算机的处理器型号private String processor;// 计算机的内存大小(单位:GB)private int ram;// 计算机的硬盘大小(单位:GB)private int hardDrive;// 私有构造函数,仅允许通过 Builder 创建 Computer 实例// 参数 builder 用于从 Builder 类中获取处理器、内存和硬盘的信息private Computer(Builder builder) {this.processor = builder.processor;this.ram = builder.ram;this.hardDrive = builder.hardDrive;}// Builder 类,用于构建 Computer 实例public static class Builder {// 计算机的处理器型号private String processor;// 计算机的内存大小(单位:GB)private int ram;// 计算机的硬盘大小(单位:GB)private int hardDrive;// 设置处理器型号// 参数 processor 为处理器型号// 返回当前 Builder 实例,以便可以继续链式调用其他方法public Builder processor(String processor) {this.processor = processor;return this;}// 设置内存大小// 参数 ram 为内存大小(单位:GB)// 返回当前 Builder 实例,以便可以继续链式调用其他方法public Builder ram(int ram) {this.ram = ram;return this;}// 设置硬盘大小// 参数 hardDrive 为硬盘大小(单位:GB)// 返回当前 Builder 实例,以便可以继续链式调用其他方法public Builder hardDrive(int hardDrive) {this.hardDrive = hardDrive;return this;}// 构建 Computer 实例// 返回使用当前 Builder 实例创建的 Computer 实例public Computer build() {return new Computer(this);}}// Getter 方法,用于获取处理器型号public String getProcessor() {return processor;}// Getter 方法,用于获取内存大小public int getRam() {return ram;}// Getter 方法,用于获取硬盘大小public int getHardDrive() {return hardDrive;}// 重写 toString 方法,用于格式化输出 Computer 实例的信息@Overridepublic String toString() {return "Computer{" +"processor='" + processor + '\'' +", ram=" + ram +", hardDrive=" + hardDrive +'}';}
}// 客户端代码
public class Client {public static void main(String[] args) {// 创建一台配置较高的计算机Computer computerHighEnd = new Computer.Builder().processor("i9")      // 设置处理器型号为 i9.ram(32)             // 设置内存大小为 32 GB.hardDrive(1024)     // 设置硬盘大小为 1024 GB.build();            // 构建 Computer 实例// 创建一台配置较低的计算机Computer computerLowEnd = new Computer.Builder().processor("i3")     // 设置处理器型号为 i3.ram(4)             // 设置内存大小为 4 GB.hardDrive(128)     // 设置硬盘大小为 128 GB.build();           // 构建 Computer 实例// 输出高配置计算机的信息System.out.println(computerHighEnd);  // 输出: Computer{processor='i9', ram=32, hardDrive=1024}// 输出低配置计算机的信息System.out.println(computerLowEnd);   // 输出: Computer{processor='i3', ram=4, hardDrive=128}}
}
使用场景
  • 当你需要创建一个复杂对象,且该对象的构建过程需要分步骤进行时。
  • 当构建对象的不同配置需要不同的步骤时。
  • 当构建对象的步骤可能会发生变化时。

建造者模式通过将构建过程与表示分离,使得可以在不同的情况下使用相同的构建步骤来创建不同的对象配置。这对于创建复杂对象时非常有用,特别是在对象的构建过程需要多个步骤的情况下。

小结

建造者模式适用于创建具有多个可选部分的复杂对象。它提供了一种方式来逐步构建这些对象,同时保持代码的简洁性和可扩展性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Daiqile SQL注入绕过
  • 八股面试大总结① —— 计算机网络篇
  • 【Android】JSON的具体使用方法之数据格式,数据解析,GSON的使用
  • 【总览】如何精读文献-经验分享
  • DC-5靶机渗透测试
  • 超赞!墙裂推荐这款开箱即用、永久免费的运维监控平台
  • Apple 智能基础语言模型
  • 【LVS】防火墙mark标记解决调度问题
  • 5、关于kali搭建vulhub
  • Datawhale X 魔搭 AI夏令营第四期 | AIGC文生图——可图Kolors-LoRA风格故事 Task1笔记
  • 雪花算法(Snowflake Algorithm)
  • C/C++字符串函数
  • LVS (Linux virual server)
  • 【ARM】ARM Cortex 处理器详细讲解
  • Upload 上传图标不显示
  • @angular/forms 源码解析之双向绑定
  • chrome扩展demo1-小时钟
  • Cookie 在前端中的实践
  • echarts花样作死的坑
  • idea + plantuml 画流程图
  • java8 Stream Pipelines 浅析
  • Linux CTF 逆向入门
  • mac修复ab及siege安装
  • magento 货币换算
  • Python_OOP
  • Sass 快速入门教程
  • tensorflow学习笔记3——MNIST应用篇
  • underscore源码剖析之整体架构
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 前端存储 - localStorage
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-插入排序
  • 我感觉这是史上最牛的防sql注入方法类
  • 硬币翻转问题,区间操作
  • 智能合约Solidity教程-事件和日志(一)
  • 交换综合实验一
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • # wps必须要登录激活才能使用吗?
  • #FPGA(基础知识)
  • (3)STL算法之搜索
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (js)循环条件满足时终止循环
  • (办公)springboot配置aop处理请求.
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (杂交版)植物大战僵尸
  • (转)母版页和相对路径
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .naturalWidth 和naturalHeight属性,
  • .NET : 在VS2008中计算代码度量值
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core WebAPI中使用swagger版本控制,添加注释