Java 实现电脑组装:建造者模式的类图与代码全解析
以下是使用 Java 实现的电脑组装的建造者模式示例代码及类图描述: 类图: ```plantuml @startuml class Computer { - CPU cpu - RAM ram - HardDisk hardDisk - MainFrame mainFrame - Monitor monitor + Computer(CPU cpu, RAM ram, HardDisk hardDisk, MainFrame mainFrame, Monitor monitor) + getCPU(): CPU + getRAM(): RAM + getHardDisk(): HardDisk + getMainFrame(): MainFrame + getMonitor(): Monitor } interface ComputerBuilder { + setCPU(CPU cpu) + setRAM(RAM ram) + setHardDisk(HardDisk hardDisk) + setMainFrame(MainFrame mainFrame) + setMonitor(Monitor monitor) + build(): Computer } class LaptopBuilder implements ComputerBuilder { - CPU cpu - RAM ram - HardDisk hardDisk - MainFrame mainFrame - Monitor monitor + setCPU(CPU cpu) + setRAM(RAM ram) + setHardDisk(HardDisk hardDisk) + setMainFrame(MainFrame mainFrame) + setMonitor(Monitor monitor) + build(): Computer } class DesktopBuilder implements ComputerBuilder { - CPU cpu - RAM ram - HardDisk hardDisk - MainFrame mainFrame - Monitor monitor + setCPU(CPU cpu) + setRAM(RAM ram) + setHardDisk(HardDisk hardDisk) + setMainFrame(MainFrame mainFrame) + setMonitor(Monitor monitor) + build(): Computer } class ServerBuilder implements ComputerBuilder { - CPU cpu - RAM ram - HardDisk hardDisk - MainFrame mainFrame - Monitor monitor + setCPU(CPU cpu) + setRAM(RAM ram) + setHardDisk(HardDisk hardDisk) + setMainFrame(MainFrame mainFrame) + setMonitor(Monitor monitor) + build(): Computer } @enduml ``` 代码: ```java class CPU { private String model; public CPU(String model) { this.model = model; } public String getModel() { return model; } } class RAM { private int capacity; public RAM(int capacity) { this.capacity = capacity; } public int getCapacity() { return capacity; } } class HardDisk { private int capacity; public HardDisk(int capacity) { this.capacity = capacity; } public int getCapacity() { return capacity; } } class MainFrame { private String model; public MainFrame(String model) { this.model = model; } public String getModel() { return model; } } class Monitor { private String model; public Monitor(String model) { this.model = model; } public String getModel() { return model; } } class Computer { private CPU cpu; private RAM ram; private HardDisk hardDisk; private MainFrame mainFrame; private Monitor monitor; public Computer(CPU cpu, RAM ram, HardDisk hardDisk, MainFrame mainFrame, Monitor monitor) { this.cpu = cpu; this.ram = ram; this.hardDisk = hardDisk; this.mainFrame = mainFrame; this.monitor = monitor; } public CPU getCPU() { return cpu; } public RAM getRAM() { return ram; } public HardDisk getHardDisk() { return hardDisk; } public MainFrame getMainFrame() { return mainFrame; } public Monitor getMonitor() { return monitor; } } interface ComputerBuilder { void setCPU(CPU cpu); void setRAM(RAM ram); void setHardDisk(HardDisk hardDisk); void setMainFrame(MainFrame mainFrame); void setMonitor(Monitor monitor); Computer build(); } class LaptopBuilder implements ComputerBuilder { private CPU cpu; private RAM ram; private HardDisk hardDisk; private MainFrame mainFrame; private Monitor monitor; @Override public void setCPU(CPU cpu) { this.cpu = cpu; } @Override public void setRAM(RAM ram) { this.ram = ram; } @Override public void setHardDisk(HardDisk hardDisk) { this.hardDisk = hardDisk; } @Override public void setMainFrame(MainFrame mainFrame) { this.mainFrame = mainFrame; } @Override public void setMonitor(Monitor monitor) { this.monitor = monitor; } @Override public Computer build() { return new Computer(cpu, ram, hardDisk, mainFrame, monitor); } } class DesktopBuilder implements ComputerBuilder { private CPU cpu; private RAM ram; private HardDisk hardDisk; private MainFrame mainFrame; private Monitor monitor; @Override public void setCPU(CPU cpu) { this.cpu = cpu; } @Override public void setRAM(RAM ram) { this.ram = ram; } @Override public void setHardDisk(HardDisk hardDisk) { this.hardDisk = hardDisk; } @Override public void setMainFrame(MainFrame mainFrame) { this.mainFrame = mainFrame; } @Override public void setMonitor(Monitor monitor) { this.monitor = monitor; } @Override public Computer build() { return new Computer(cpu, ram, hardDisk, mainFrame, monitor); } } class ServerBuilder implements ComputerBuilder { private CPU cpu; private RAM ram; private HardDisk hardDisk; private MainFrame mainFrame; private Monitor monitor; @Override public void setCPU(CPU cpu) { this.cpu = cpu; } @Override public void setRAM(RAM ram) { this.ram = ram; } @Override public void setHardDisk(HardDisk hardDisk) { this.hardDisk = hardDisk; } @Override public void setMainFrame(MainFrame mainFrame) { this.mainFrame = mainFrame; } @Override public void setMonitor(Monitor monitor) { this.monitor = null; // 服务器可能没有显示器 } @Override public Computer build() { return new Computer(cpu, ram, hardDisk, mainFrame, monitor); } } public class ComputerAssembly { public static void main(String[] args) { LaptopBuilder laptopBuilder = new LaptopBuilder(); laptopBuilder.setCPU(new CPU("Intel Core i7")); laptopBuilder.setRAM(new RAM(16)); laptopBuilder.setHardDisk(new HardDisk(512)); laptopBuilder.setMainFrame(new MainFrame("Dell XPS")); laptopBuilder.setMonitor(new Monitor("Dell 15.6 inch")); Computer laptop = laptopBuilder.build(); DesktopBuilder desktopBuilder = new DesktopBuilder(); desktopBuilder.setCPU(new CPU("AMD Ryzen 9")); desktopBuilder.setRAM(new RAM(32)); desktopBuilder.setHardDisk(new HardDisk(1024)); desktopBuilder.setMainFrame(new MainFrame("HP Pavilion")); desktopBuilder.setMonitor(new Monitor("HP 27 inch")); Computer desktop = desktopBuilder.build(); ServerBuilder serverBuilder = new ServerBuilder(); serverBuilder.setCPU(new CPU("Intel Xeon")); serverBuilder.setRAM(new RAM(64)); serverBuilder.setHardDisk(new HardDisk(2048)); serverBuilder.setMainFrame(new MainFrame("IBM Server")); Computer server = serverBuilder.build(); } } ``` 额外注意的逻辑点: 1. 建造者模式中,各个建造者类的实现需要确保属性的设置和构建的逻辑正确。 2. 在实际应用中,可能需要对硬件设备的属性进行更多的校验和限制。 3. 考虑添加异常处理,例如在硬件设备创建或设置属性时出现错误的情况。 ######[AI写代码神器 | 2012点数解答 | 2025-03-20 15:28:28]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)405
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)305
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1134
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)274
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)305
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)317
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)355
- Java 继承实现:重温经典剪刀石头布游戏(字节豆包 | 451点数解答 | 2024-10-20 19:57:58)463
- Java实现日期递增:无数据返20250901,遇20250901返20250902及开发注意要点 (DeepSeek | 242点数解答 | 2025-09-02 11:39:53)82