11.5
今天在写软件构造的实验5
.类图@startuml
class Computer {
- cpu: String
- memory: String
- hardDisk: String
- mainFrame: String
- type: String
+ setCPU(cpu: String): void
+ setMemory(memory: String): void
+ setHardDisk(hardDisk: String): void
+ setMainFrame(mainFrame: String): void
+ setType(type: String): void
+ toString(): String
}
abstract class ComputerBuilder {
# computer: Computer
+ buildComputer(): void
+ getComputer(): Computer
+ buildCPU(): void
+ buildMemory(): void
+ buildHardDisk(): void
+ buildMainFrame(): void
}
class DesktopBuilder {
+ buildCPU(): void
+ buildMemory(): void
+ buildHardDisk(): void
+ buildMainFrame(): void
}
class LaptopBuilder {
+ buildCPU(): void
+ buildMemory(): void
+ buildHardDisk(): void
+ buildMainFrame(): void
}
class Director {
- builder: ComputerBuilder
+ setBuilder(builder: ComputerBuilder): void
+ construct(): Computer
}
ComputerBuilder --> Computer
DesktopBuilder --|> ComputerBuilder
LaptopBuilder --|> ComputerBuilder
Director --> ComputerBuilder
@enduml
2.源代码
- Computer类(产品类)/**
-
计算机产品类
*/
public class Computer {
private String cpu;
private String memory;
private String hardDisk;
private String mainFrame;
private String type;public void setCPU(String cpu) {
this.cpu = cpu;
}public void setMemory(String memory) {
this.memory = memory;
}public void setHardDisk(String hardDisk) {
this.hardDisk = hardDisk;
}public void setMainFrame(String mainFrame) {
this.mainFrame = mainFrame;
}public void setType(String type) {
this.type = type;
}@Override
public String toString() {
return "计算机类型: " + type + "\n" +
"CPU: " + cpu + "\n" +
"内存: " + memory + "\n" +
"硬盘: " + hardDisk + "\n" +
"主机: " + mainFrame;
}
}
- ComputerBuilder类(抽象建造者)/**
-
抽象建造者
*/
public abstract class ComputerBuilder {
protected Computer computer;public ComputerBuilder() {
this.computer = new Computer();
}public abstract void buildCPU();
public abstract void buildMemory();
public abstract void buildHardDisk();
public abstract void buildMainFrame();public Computer getComputer() {
return computer;
}public void buildComputer() {
buildCPU();
buildMemory();
buildHardDisk();
buildMainFrame();
}
}
- DesktopBuilder类(具体建造者)/**
-
台式机建造者
*/
public class DesktopBuilder extends ComputerBuilder {@Override
public void buildCPU() {
computer.setCPU("Intel Core i7-12700K 台式机CPU");
}@Override
public void buildMemory() {
computer.setMemory("32GB DDR4 台式机内存");
}@Override
public void buildHardDisk() {
computer.setHardDisk("2TB SSD 台式机硬盘");
}@Override
public void buildMainFrame() {
computer.setMainFrame("ATX 中塔式机箱");
}@Override
public void buildComputer() {
super.buildComputer();
computer.setType("台式机");
}
}
- LaptopBuilder类(具体建造者)/**
-
笔记本电脑建造者
*/
public class LaptopBuilder extends ComputerBuilder {@Override
public void buildCPU() {
computer.setCPU("Intel Core i7-1260P 笔记本CPU");
}@Override
public void buildMemory() {
computer.setMemory("16GB LPDDR5 笔记本内存");
}@Override
public void buildHardDisk() {
computer.setHardDisk("1TB NVMe SSD 笔记本硬盘");
}@Override
public void buildMainFrame() {
computer.setMainFrame("铝合金轻薄机身");
}@Override
public void buildComputer() {
super.buildComputer();
computer.setType("笔记本电脑");
}
}
- Director类(指挥者)/**
-
指挥者
*/
public class Director {
private ComputerBuilder builder;public void setBuilder(ComputerBuilder builder) {
this.builder = builder;
}public Computer construct() {
if (builder == null) {
throw new IllegalStateException("建造者未设置");
}
builder.buildComputer();
return builder.getComputer();
}
}
- 客户端测试类/**
-
客户端测试类
*/
public class Client {
public static void main(String[] args) {
// 创建指挥者
Director director = new Director();System.out.println("=== 组装台式机 ==="); // 创建台式机建造者 ComputerBuilder desktopBuilder = new DesktopBuilder(); director.setBuilder(desktopBuilder); Computer desktop = director.construct(); System.out.println(desktop); System.out.println("\n=== 组装笔记本电脑 ==="); // 创建笔记本电脑建造者 ComputerBuilder laptopBuilder = new LaptopBuilder(); director.setBuilder(laptopBuilder); Computer laptop = director.construct(); System.out.println(laptop); System.out.println("\n=== 直接使用建造者 ==="); // 也可以直接使用建造者 ComputerBuilder customBuilder = new DesktopBuilder(); customBuilder.buildComputer(); Computer customComputer = customBuilder.getComputer(); System.out.println(customComputer);}
}
3.运行结果
![40a82a42095625546fd35d123a52f732]()


浙公网安备 33010602011771号