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

java设计模式:工厂方法 + 建造者模式

模式结合设计方案

这个设计充分利用了两种模式的优势:​​工厂方法负责创建不同类型产品的建造者​​,而​​建造者模式负责分步骤构造复杂产品​​

类结构设计

- Computer (产品)
- ComputerBuilder (抽象建造者) 
- GamingComputerBuilder, OfficeComputerBuilder (具体建造者)
- ComputerBuilderFactory (建造者工厂)
- ComputerDirector (指挥者)

💻 完整代码实现

  1. 产品类 - Computer
public class Computer {private String cpu;private String memory;private String storage;private String graphicsCard;private String powerSupply;// 私有构造函数,只能通过建造者构建private Computer() {}// Setter方法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 setGraphicsCard(String graphicsCard) { this.graphicsCard = graphicsCard; }public void setPowerSupply(String powerSupply) { this.powerSupply = powerSupply; }@Overridepublic String toString() {return String.format("Computer[CPU=%s, Memory=%s, Storage=%s, Graphics=%s, Power=%s]", cpu, memory, storage, graphicsCard, powerSupply);}
}
  1. 抽象建造者 - ComputerBuilder
public interface ComputerBuilder {void buildCpu();void buildMemory();void buildStorage();void buildGraphicsCard();void buildPowerSupply();Computer getResult();
}
  1. 具体建造者 - 游戏电脑和办公电脑
// 游戏电脑建造者
public class GamingComputerBuilder implements ComputerBuilder {private Computer computer;public GamingComputerBuilder() {this.computer = new Computer();}@Overridepublic void buildCpu() {computer.setCpu("Intel Core i9-13900K");}@Overridepublic void buildMemory() {computer.setMemory("32GB DDR5 RGB");}@Overridepublic void buildStorage() {computer.setStorage("2TB NVMe SSD + 4TB HDD");}@Overridepublic void buildGraphicsCard() {computer.setGraphicsCard("NVIDIA GeForce RTX 4090");}@Overridepublic void buildPowerSupply() {computer.setPowerSupply("1200W 80+ Platinum");}@Overridepublic Computer getResult() {return computer;}
}// 办公电脑建造者
public class OfficeComputerBuilder implements ComputerBuilder {private Computer computer;public OfficeComputerBuilder() {this.computer = new Computer();}@Overridepublic void buildCpu() {computer.setCpu("Intel Core i5-12400");}@Overridepublic void buildMemory() {computer.setMemory("16GB DDR4");}@Overridepublic void buildStorage() {computer.setStorage("512GB NVMe SSD");}@Overridepublic void buildGraphicsCard() {computer.setGraphicsCard("Integrated Intel UHD Graphics");}@Overridepublic void buildPowerSupply() {computer.setPowerSupply("550W 80+ Bronze");}@Overridepublic Computer getResult() {return computer;}
}
  1. 工厂方法 - 建造者工厂
public class ComputerBuilderFactory {public enum ComputerType {GAMING, OFFICE}public static ComputerBuilder createBuilder(ComputerType type) {switch (type) {case GAMING:return new GamingComputerBuilder();case OFFICE:return new OfficeComputerBuilder();default:throw new IllegalArgumentException("不支持的电脑类型: " + type);}}
}
  1. 指挥者 - ComputerDirector
public class ComputerDirector {public Computer construct(ComputerBuilder builder) {// 统一的构建流程,确保所有电脑都按正确顺序组装builder.buildCpu();builder.buildMemory();builder.buildStorage();builder.buildGraphicsCard();builder.buildPowerSupply();return builder.getResult();}// 可选的快速构建方法public Computer constructGamingComputer() {ComputerBuilder builder = ComputerBuilderFactory.createBuilder(ComputerBuilderFactory.ComputerType.GAMING);return construct(builder);}public Computer constructOfficeComputer() {ComputerBuilder builder = ComputerBuilderFactory.createBuilder(ComputerBuilderFactory.ComputerType.OFFICE);return construct(builder);}
}
  1. 客户端使用
public class Client {public static void main(String[] args) {ComputerDirector director = new ComputerDirector();// 方式1:通过工厂方法创建具体建造者,然后指挥者构建System.out.println("=== 方式1:分步构建 ===");ComputerBuilder gamingBuilder = ComputerBuilderFactory.createBuilder(ComputerBuilderFactory.ComputerType.GAMING);Computer gamingComputer = director.construct(gamingBuilder);System.out.println("游戏电脑: " + gamingComputer);// 方式2:直接使用指挥者的快捷方法System.out.println("\n=== 方式2:快捷构建 ===");Computer officeComputer = director.constructOfficeComputer();System.out.println("办公电脑: " + officeComputer);// 方式3:动态根据配置构建System.out.println("\n=== 方式3:动态构建 ===");String userPreference = "performance"; // 可以从配置文件中读取Computer dynamicComputer;if ("performance".equals(userPreference)) {dynamicComputer = director.constructGamingComputer();} else {dynamicComputer = director.constructOfficeComputer();}System.out.println("动态配置电脑: " + dynamicComputer);}
}

✨ 设计模式的优越性体现
🎯 ​​关注点分离与职责清晰​​

​​工厂方法​​专注于创建适当类型的建造者对象

​​建造者模式​​专注于分步骤构造复杂产品

​​指挥者​​控制构建过程,确保一致性

🔄 ​​极高的灵活性和可扩展性​​
新增电脑类型时,只需要增加新的具体建造者,无需修改现有代码:

// 新增轻薄本建造者
public class UltrabookComputerBuilder implements ComputerBuilder {// 实现所有构建方法...
}// 在工厂中注册新类型
public static ComputerBuilder createBuilder(ComputerType type) {switch (type) {case GAMING: return new GamingComputerBuilder();case OFFICE: return new OfficeComputerBuilder();case ULTRABOOK: return new UltrabookComputerBuilder(); // 新增default: throw new IllegalArgumentException("不支持的电脑类型: " + type);}
}

🛡️ ​​构建过程的质量保证​​
指挥者确保了所有电脑都按照正确的顺序和标准构建:

public Computer construct(ComputerBuilder builder) {// 必须的顺序:先装基础部件,再装扩展部件builder.buildCpu();          // 第一步:安装CPUbuilder.buildMemory();       // 第二步:安装内存builder.buildStorage();      // 第三步:安装存储builder.buildGraphicsCard(); // 第四步:安装显卡builder.buildPowerSupply();  // 第五步:安装电源return builder.getResult();
}

💎 总结
这种结合模式充分发挥了各自的优势:​​工厂方法提供了创建对象的灵活性​​,而​​建造者模式提供了构建复杂对象的精细控制​​

这种设计使得系统在面对变化时更加健壮,特别是在需要创建具有复杂内部结构的对象时,优势更加明显。

当你的系统需要创建多种类型的复杂对象,且每种对象都有自己特定的构建过程时,考虑使用这种工厂方法与建造者模式的组合,它能为你带来更好的代码结构性和可维护性。

http://www.dtcms.com/a/418183.html

相关文章:

  • 3、Lombok进阶功能实战:Builder模式、异常处理与资源管理高级用法
  • Linux 内核开发 的核心知识点
  • 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 理解操作系统
  • 小米17对比iPhone 17:2025年深度对比
  • 借助Aspose.Email,使用 Python 将 EML 转换为 MHTML
  • 免费做名片的网站专业网站开发设计
  • 微服务项目->在线oj系统(Java-Spring)-后台管理(1)
  • 怎么防止网站攻击做网站价格表
  • 1、Product-Service 服务设计规范文档
  • 网深科技NetInside网络流量异常分析报告
  • 基于TCP的简易端口扫描器
  • 大腾智能助力深圳市联合创造科技,实现精密触控屏行业数字化升级
  • MR+无人机-增强态势感知、更高效的现场检查和增强
  • 无人机遥控器使用与信号连接问题处理
  • 德克西尔抗振倾角仪,守护无人机云台稳定清晰
  • Mosquitto:MQTT Broker入门与分布式部署最佳实践
  • 无人机姿态控制技术详解
  • 做网站所需要的公司细责及条款微信小程序推广
  • keepalived部署
  • 前端实现抽烟识别:从算法到可视化
  • j2ee网站开发免费教程甘肃金顶建设公司网站
  • Linux ssh/scp/sftp命令使用及免密登录配置
  • CBB21B-MPB电子元器件 RC容钏电子 高性能金属化聚丙烯薄膜直流电容器 技术解析
  • CustomKD论文阅读
  • 腾讯面试题总结(1)
  • 【服务器知识】HTTP 请求头信息及其用途详细说明
  • AbMole| ABDP 493/503( M9850;中性脂滴荧光探针)
  • QML核心概念:用户输入与布局管理
  • 在原备案号下增加新网站微信公众平台是什么
  • AI智能体实战开发教程(从0到企业级项目落地):62节全完结,助力金九银十升职加薪!