一、背景
现在很多pc游戏对电脑的配置要求比较高,于是现在的很多玩家都喜欢选择组装的电脑,这样才能自主定义自己的性能要求。但是大多数计算机小白却不懂如何选型和组装,如果自己组装还得现学组装流程和一些硬件方面的知识。于是一些卖组装电脑的店家便出现了。用户只需要给他们描述自己想要个什么样的电脑,他们便给用户选型(cpu,主板,内存,显卡等等)并组装好给用户。这便是我们要说的建造者模式。
二、概念
建造者模式:将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
三、代码实例
package builderPattern;
/**
* 创建computer各个部件的指定接口 抽象建造者
*/
interface ComputerBuilder {
public void buildCpu();
public void buildMemory();
public void buildGraphics();
public Computer getComputer();
}
/**
* 组装电脑的过程(使用建造者的对象)
* 构建过程
*/
class ComputerDirector {
public void assembleComputer(ComputerBuilder builder) {
builder.buildCpu();
builder.buildMemory();
builder.buildGraphics();
}
}
/**
* 具体的装机人员(具体建造者)
*
*/
class ComputerConcreteBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCpu() {
System.out.println("组装酷睿i7 cpu");
computer.setCpuName("酷睿i7");
}
@Override
public void buildMemory() {
System.out.println("组装DDR4 16G内存");
computer.setMemoryName("DDR4 16G");
}
@Override
public void buildGraphics() {
System.out.println("组装1080p 显卡");
computer.setGraphicsName("1080p 显卡");
}
@Override
public Computer getComputer() {
return computer;
}
}
/**
* 产品 电脑 表示被构造的复杂对象
*/
class Computer {
private String cpuName;
private String memoryName;
private String graphicsName;
public String getCpuName() {
return cpuName;
}
public void setCpuName(String cpuName) {
this.cpuName = cpuName;
}
public String getMemoryName() {
return memoryName;
}
public void setMemoryName(String memoryName) {
this.memoryName = memoryName;
}
public String getGraphicsName() {
return graphicsName;
}
public void setGraphicsName(String graphicsName) {
this.graphicsName = graphicsName;
}
public void show() {
System.out.println("computer:" + "cpu:" + this.cpuName
+ " memory:" + this.memoryName + " graphics:"
+ this.graphicsName);
}
}
public class BuilderPatternCli {
public static void main(String[] args) {
ComputerDirector cmpDirector = new ComputerDirector();//组装过程
ComputerConcreteBuilder cmpconbd = new ComputerConcreteBuilder();//具体建造者
cmpDirector.assembleComputer(cmpconbd);//组装
cmpconbd.getComputer().show();//得到电脑
}
}
四、总结
1.建造者模式由抽象建造者,具体建造者,建造过程对象,和要建造的复杂对象等角色组成。建造过程对象提供统一的建造过程,具体建造者提供不同的建造方式。
2.适用场景:
a.当创建复杂对象的算法独立于该对象的组成部分或装配方式时,适合适用建造者模式。
b.当构造过程必须允许被构造的对象有不同表示时。