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.源代码

  1. 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;
    }
    }

  1. 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();
    }
    }

  1. 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("台式机");
    }
    }

  1. 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("笔记本电脑");
    }
    }

  1. 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();
    }
    }

  1. 客户端测试类/**
  • 客户端测试类
    */
    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

posted @ 2025-11-05 23:36  山蚯  阅读(5)  评论(0)    收藏  举报