建造者模式例题

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

    }

}
相关推荐
时间静止不是简史10 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_322414280413 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
金銀銅鐵15 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
福建佰胜张工16 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
catoop16 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x16 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
驭渊的小故事17 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客17 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn18817 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn18 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc