建造者模式例题

假定现在有这样一个需求:电脑可以由主板、硬盘、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();

    }

}
相关推荐
nanxun88615 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户15630681035117 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师19 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程