建造者模式例题

假定现在有这样一个需求:电脑可以由主板、硬盘、CPU、内存、显卡、显示器和键盘等元素构成,华硕公司可以生产里面的各种元素,Lenovo公司也可以生产里面的各种元素。假定你现在就想要一台电脑,这个电脑可以全部是来自华硕的品牌机,也可以是来自Lenovo的品牌机,也可以一部分元素来自华硕、另一部分来自Lenovo,请根据上述要求对代码进行设计,给出设计思路和源码。

以下这段代码展示了一个简单的电脑组装系统。首先定义了不同的电脑元素接口,如主板、硬盘、CPU等。然后定义了电脑类 Computer,包含各种电脑组件,并通过 set 方法设置各个组件,最后通过 showInfo 方法展示电脑信息。

接着有一个电脑建造者类 ComputerBuilder,其中包含了建造不同品牌电脑的方法,如 buildHSComputer(华硕电脑)、buildLenovoComputer(联想电脑)、buildCustomComputer(混合电脑),最后通过 getComputer 方法获取组装好的电脑。

最后是 Director 类,包含了导演的角色,负责调用建造者类中的方法来组装不同品牌的电脑,并展示电脑的信息。

电脑元素接口:

java 复制代码
//电脑元素接口
interface IMotherboard {

    void makeIMotherboard();

}

interface IHardDisk {

    void makeIHardDisk();

}

interface ICPU {

    void makeICPU();

}

interface IMemory {

    void makeIMemory();

}

interface IGraphicsCard {

    void makeIGraphicsCard();

}

interface IDisplay {

    void makeIDisplay();

}

interface IKeyboard {

    void makeIKeyboard();

}

电脑类

java 复制代码
//电脑
public class Computer {

  
private IMotherboard motherboard;

    private IHardDisk hardDisk;

    private ICPU cpu;

    private IMemory memory;

    private IGraphicsCard graphicsCard;

    private IDisplay display;

    private IKeyboard keyboard;

    public void setMotherboard(IMotherboard motherboard) {

        this.motherboard = motherboard;

    }

    public void setHardDisk(IHardDisk hardDisk) {

        this.hardDisk = hardDisk;

    }

    public void setCpu(ICPU cpu) {

        this.cpu = cpu;

    }

    public void setMemory(IMemory memory) {

        this.memory = memory;

    }

    public void setGraphicsCard(IGraphicsCard graphicsCard) {

        this.graphicsCard = graphicsCard;

    }

    public void setDisplay(IDisplay display) {

        this.display = display;

    }

    public void setKeyboard(IKeyboard keyboard) {

        this.keyboard = keyboard;

    }

    public void showInfo() {

        if (motherboard != null) {

            motherboard.makeIMotherboard();

        }

        if (hardDisk != null) {

            hardDisk.makeIHardDisk();

        }

        if (cpu != null) {

            cpu.makeICPU();

        }

        if (memory != null) {

            memory.makeIMemory();

        }

        if (graphicsCard != null) {

            graphicsCard.makeIGraphicsCard();

        }

        if (display != null) {

            display.makeIDisplay();

        }

        if (keyboard != null) {

            keyboard.makeIKeyboard();

        }

    }

}

}

电脑建造者类

java 复制代码
//电脑建造者
class ComputerBuilder {

    private Computer computer;

    public ComputerBuilder() {

        computer = new Computer();

    }

    public void buildHSComputer() {//华硕电脑

        computer.setMotherboard(new HSMotherboard());

        computer.setHardDisk(new HSHardDisk());

        computer.setCpu(new HSCPU());

        computer.setMemory(new HSMemory());

        computer.setGraphicsCard(new HSGraphicsCard());

        computer.setDisplay(new HSDisplay());

        computer.setKeyboard(new HSKeyboard());

    }

    public void buildLenovoComputer() {//联想电脑

        computer.setMotherboard(new LenovoMotherboard());

        computer.setHardDisk(new LenovoHardDisk());

        computer.setCpu(new LenovoCPU());

        computer.setMemory(new LenovoMemory());

        computer.setGraphicsCard(new LenovoGraphicsCard());

        computer.setDisplay(new LenovoDisplay());

        computer.setKeyboard(new LenovoKeyboard());

    }

    public void buildCustomComputer() {//建造混合电脑

        computer.setMotherboard(new HSMotherboard());

        computer.setHardDisk(new LenovoHardDisk());

        computer.setCpu(new LenovoCPU());

        computer.setMemory(new HSMemory());

        computer.setGraphicsCard(new LenovoGraphicsCard());

        computer.setDisplay(new LenvovDisplay());

        computer.setKeyboard(new HSKeyboard());

    }

    public Computer getComputer() {//获得组装好的电脑

        return computer;

    }

}

导演类

java 复制代码
//导演类
class Director {

   private ComputerBuilder builder = new ComputerBuilder();

    public void buildHSComputer() {

        // 华硕电脑

        builder.buildHSComputer();

        Computer hsComputer = builder.getComputer();

        hsComputer.showInfo();

    }

    public void buildLenovoComputer() {

        // 联想电脑

        builder.buildLenovoComputer();

        Computer lenovoComputer = builder.getComputer();

        lenovoComputer.showInfo();

    }

    public void buildCustomComputer() {

        // 混合电脑

        builder.buildCustomComputer();

        Computer customComputer = builder.getComputer();

        customComputer.showInfo();

    }

}
相关推荐
不学会Ⅳ9 分钟前
Mac M芯片搭建jdk源码环境(jdk24)
java·开发语言·macos
虫小宝13 分钟前
高佣金返利平台监控体系建设:APM、链路追踪与佣金异常预警系统技术实现
java
sniper_fandc1 小时前
SpringBoot系列—入门
java·spring boot·后端
代码的余温2 小时前
Maven引入第三方JAR包实战指南
java·maven·jar
pianmian16 小时前
类(JavaBean类)和对象
java
我叫小白菜6 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison7 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍7 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122467 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~8 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee