STEP #1

(1/2)

此处切换ai服务商,可对比多家ai的回复,取最优解。

上一步下一步关闭
酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

电脑组装工厂可以将CPU、内存(RAM)、硬盘(HardDisk)、主机(MainFrame)、显示器(Monitor)等硬件设备组装在一起构成一台完整的电脑,且构成的电脑可以是笔记本,也可以是台式机,还可以是不提供显示器的服务器主机。对于用户而言,无须关心电脑的组成设备和组装过程,工厂返回给用户的是完整的电脑对象。使用建造者模式实现电脑组装过程,要求绘制类图并编程实现。

以下是使用 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. 考虑添加异常处理,例如在硬件设备创建或设置属性时出现错误的情况。 [2025-03-20 15:28:28 | AI写代码神器 | 2012点数解答]

相关提问