当涉及到创建一个复杂对象,其构造过程可能涉及多个步骤,并且这些步骤可能因为不同的需求而变化时,建造者模式就显得很有用。它允许你将对象的构造与表示分离,从而可以使用相同的构造过程来创建不同的表示。
在建造者模式中,有以下几个关键角色:
-
产品(Product):表示正在构建的复杂对象。
-
抽象建造者(Builder):定义了构建产品所需要的各个部分的抽象接口,具体的建造者将实现这些接口来构建具体的产品。
-
具体建造者(Concrete Builder):实现了抽象建造者接口,负责构建产品的各个部分,并提供一个获取构建完成后的产品的方法。
-
指挥者(Director):负责使用具体建造者来构建产品,也可以包含一些控制构建过程的逻辑。
// 产品类:电脑
class Computer {
private String cpu;
private String memory;
private String storage;
public void setCPU(String cpu) {
this.cpu = cpu;
}
public void setMemory(String memory) {
this.memory = memory;
}
public void setStorage(String storage) {
this.storage = storage;
}
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", memory='" + memory + '\'' +
", storage='" + storage + '\'' +
'}';
}
}
// 抽象建造者接口
interface ComputerBuilder {
void buildCPU();
void buildMemory();
void buildStorage();
Computer getResult();
}
// 具体建造者:高性能电脑建造者
class HighPerformanceComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCPU() {
computer.setCPU("Intel Core i7");
}
@Override
public void buildMemory() {
computer.setMemory("16GB DDR4");
}
@Override
public void buildStorage() {
computer.setStorage("1TB SSD");
}
@Override
public Computer getResult() {
return computer;
}
}
// 指挥者:负责构建电脑
class ComputerDirector {
private ComputerBuilder builder;
public ComputerDirector(ComputerBuilder builder) {
this.builder = builder;
}
public Computer construct() {
builder.buildCPU();
builder.buildMemory();
builder.buildStorage();
return builder.getResult();
}
}
public class Main {
public static void main(String[] args) {
ComputerBuilder builder = new HighPerformanceComputerBuilder();
ComputerDirector director = new ComputerDirector(builder);
Computer computer = director.construct();
System.out.println(computer);
}
}