假定现在有这样一个需求:电脑可以由主板、硬盘、CPU、内存、显卡、显示器和键盘等元素构成,华硕公司可以生产里面的各种元素,Lenovo公司也可以生产里面的各种元素。假定你现在就想要一台电脑,这个电脑可以全部是来自华硕的品牌机,也可以是来自Lenovo的品牌机,也可以一部分元素来自华硕、另一部分来自Lenovo,请根据上述要求对代码进行设计,给出设计思路和源码。
以下这段代码展示了一个简单的电脑组装系统。首先定义了不同的电脑元素接口,如主板、硬盘、CPU等。然后定义了电脑类 Computer,包含各种电脑组件,并通过 set 方法设置各个组件,最后通过 showInfo 方法展示电脑信息。
接着有一个电脑建造者类 ComputerBuilder,其中包含了建造不同品牌电脑的方法,如 buildHSComputer(华硕电脑)、buildLenovoComputer(联想电脑)、buildCustomComputer(混合电脑),最后通过 getComputer 方法获取组装好的电脑。
最后是 Director 类,包含了导演的角色,负责调用建造者类中的方法来组装不同品牌的电脑,并展示电脑的信息。
电脑元素接口:
//电脑元素接口
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();
}
电脑类
//电脑
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();
}
}
}
}
电脑建造者类
//电脑建造者
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;
}
}
导演类
//导演类
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();
}
}