5.建造者模式

embedded/2025/3/22 9:21:27/

建造者模式:将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
核心思想:通过分步构建对象,避免构造函数参数过多,提高代码的可读性和灵活性。

假设你正在开发一个电脑定制系统,用户可以根据自己的需求选择不同的硬件配置(如CPU、内存、硬盘、显卡等)。电脑的配置组合非常复杂,如果使用传统的构造函数或Setter方法,会导致代码冗长且难以维护。建造者模式可以很好地解决这个问题。


1. 产品类 (Computer)

public class Computer {private String cpu;private String memory;private String storage;private String gpu;public void setCpu(String cpu) {this.cpu = cpu;}public void setMemory(String memory) {this.memory = memory;}public void setStorage(String storage) {this.storage = storage;}public void setGpu(String gpu) {this.gpu = gpu;}@Overridepublic String toString() {return "Computer{" +"cpu='" + cpu + '\'' +", memory='" + memory + '\'' +", storage='" + storage + '\'' +", gpu='" + gpu + '\'' +'}';}
}

2. 建造者接口 (ComputerBuilder)

public interface ComputerBuilder {void buildCpu();void buildMemory();void buildStorage();void buildGpu();Computer getComputer();
}

3. 具体建造者 (GamingComputerBuilderOfficeComputerBuilder)

游戏电脑建造者
public class GamingComputerBuilder implements ComputerBuilder {private Computer computer;public GamingComputerBuilder() {this.computer = new Computer();}@Overridepublic void buildCpu() {computer.setCpu("Intel i9");}@Overridepublic void buildMemory() {computer.setMemory("32GB DDR5");}@Overridepublic void buildStorage() {computer.setStorage("1TB SSD");}@Overridepublic void buildGpu() {computer.setGpu("NVIDIA RTX 4090");}@Overridepublic Computer getComputer() {return computer;}
}
办公电脑建造者
public class OfficeComputerBuilder implements ComputerBuilder {private Computer computer;public OfficeComputerBuilder() {this.computer = new Computer();}@Overridepublic void buildCpu() {computer.setCpu("Intel i5");}@Overridepublic void buildMemory() {computer.setMemory("16GB DDR4");}@Overridepublic void buildStorage() {computer.setStorage("512GB SSD");}@Overridepublic void buildGpu() {computer.setGpu("Integrated GPU");}@Overridepublic Computer getComputer() {return computer;}
}

4. 指挥者 (ComputerDirector)

public class ComputerDirector {private ComputerBuilder computerBuilder;public ComputerDirector(ComputerBuilder computerBuilder) {this.computerBuilder = computerBuilder;}public void constructComputer() {computerBuilder.buildCpu();computerBuilder.buildMemory();computerBuilder.buildStorage();computerBuilder.buildGpu();}public Computer getComputer() {return computerBuilder.getComputer();}
}

5. 客户端代码

public class ComputerBuilderDemo {public static void main(String[] args) {// 创建游戏电脑ComputerBuilder gamingBuilder = new GamingComputerBuilder();ComputerDirector gamingDirector = new ComputerDirector(gamingBuilder);gamingDirector.constructComputer();Computer gamingComputer = gamingDirector.getComputer();System.out.println("游戏电脑配置: " + gamingComputer);// 创建办公电脑ComputerBuilder officeBuilder = new OfficeComputerBuilder();ComputerDirector officeDirector = new ComputerDirector(officeBuilder);officeDirector.constructComputer();Computer officeComputer = officeDirector.getComputer();System.out.println("办公电脑配置: " + officeComputer);}
}

6. 输出

游戏电脑配置: Computer{cpu='Intel i9', memory='32GB DDR5', storage='1TB SSD', gpu='NVIDIA RTX 4090'}
办公电脑配置: Computer{cpu='Intel i5', memory='16GB DDR4', storage='512GB SSD', gpu='Integrated GPU'}

业务场景总结

  1. 问题:电脑配置复杂,直接使用构造函数或Setter方法会导致代码冗长且难以维护。

  2. 解决方案:使用建造者模式,将电脑的构建过程分解为多个步骤,并通过指挥者统一管理。

  3. 优点

    • 分离构建过程与表示,代码更清晰。

    • 支持灵活扩展,新增配置类型只需增加新的建造者。

    • 避免构造函数参数过多,提高代码可读性。


其他业务场景

  1. 订餐系统:用户可以选择不同的菜品组合(如主食、饮料、甜点),建造者模式用于构建订单。

  2. 文档生成:生成复杂的文档(如PDF、Word),建造者模式用于分步构建文档内容。

  3. 车辆制造:汽车的不同配置(如发动机、轮胎、内饰),建造者模式用于构建车辆对象。

建造者模式的核心思想是分步构建复杂对象,适用于需要灵活创建对象的场景。

文章来源:https://blog.csdn.net/NETChencs2/article/details/146304952
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/174217.html

相关文章

二进制有关概念和术语总结笔记

一、数据的基本单位(位、字节、字符、字、字长) 1、位 (Bit) 位(Bit)是计算机科学中的一个基本概念,全称为binary digit,即二进制位,是数据信息处理、传输、存储的最小单位。一个二进制信息数据包含多个bit位,每个bit位非0即1。 …

【基于深度学习的验证码识别】---- part3数据加载、模型等API介绍(1)

一、MNIST数据集 MNIST(Modified National Institute of Standards and Technology)数据集是计算机视觉和机器学习领域最经典的入门级数据集之一,主要用于手写数字识别任务。 使用示例(以PyTorch为例) from torchvi…

第七章 排序算法法法

算法时间复杂度 衡量一个算法的时间复杂度 度量一个程序(算法)执行时间的两种方法 事后统计法 这种方法可行,但是有两个问题:一是要想对涉及的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件,软件等环境因素,这种方式,要在同一台计算机的…

【设计模式有哪些】

一、创建型模式(Creation Patterns) 1. 单例模式(Singleton) 核心思想:保证一个类仅有一个实例,并提供全局访问点。实现方式:public class Singleton {// 1. 私有静态实例,volatil…

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492020 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&…

用 C 语言理解封装、继承、多态

前言 个人邮箱:zhangyixu02gmail.com本文主要是给一些做嵌入式软件开发,并且非计科的朋友做科普。使用 C 语言理解封装、继承、多态等概念。 正文 基类:最基础的结构体或函数。派生类:基类的继承自己的特性。封装:将…

桥接模式详解

以下是一个结合桥接模式解决实际开发问题的Java实现案例,涵盖多维度扩展、平台兼容性处理、渲染引擎解耦等场景需求,附带逐行中文注释: 场景描述 开发一个跨平台图形渲染框架,需支持: 图形类型扩展:圆形、…

iOS底层原理系列02-深入了解Objective-C

1. Objective-C的本质 用Objective-C编写的代码,底层其实都是C\C代码 所以Objective-C面向对象都是基于 C\C的数据结构(结构体)实现的。 Objective-C并非像其他语言那样在编译期完全确定程序的行为,而是将许多决策推迟到运行时进行,这种特性…