建造者模式(Builder Pattern)是一种创建型设计模式,它允许你按照步骤创建复杂对象。它将对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。通过使用建造者模式,你可以更加灵活地创建对象,同时还可以隐藏对象的创建细节。
建造者模式通常由以下几个角色组成:
产品(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;
}
// 其他属性的getter和setter方法
@Override
public String toString() {
return "Computer [cpu=" + cpu + ", memory=" + memory + ", storage=" + storage + "]";
}
}
// 抽象建造者
interface ComputerBuilder {
void buildCpu();
void buildMemory();
void buildStorage();
Computer getResult();
}
// 具体建造者
class DesktopBuilder implements ComputerBuilder {
private Computer computer;
public DesktopBuilder() {
this.computer = new Computer();
}
@Override
public void buildCpu() {
computer.setCpu("Intel Core i7");
}
@Override
public void buildMemory() {
computer.setMemory("16GB");
}
@Override
public void buildStorage() {
computer.setStorage("1TB HDD");
}
@Override
public Computer getResult() {
return computer;
}
}
// 指挥者
class Director {
private ComputerBuilder computerBuilder;
public Director(ComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public void constructComputer() {
computerBuilder.buildCpu();
computerBuilder.buildMemory();
computerBuilder.buildStorage();
}
}
// 使用示例
public class BuilderPatternExample {
public static void main(String[] args) {
ComputerBuilder desktopBuilder = new DesktopBuilder();
Director director = new Director(desktopBuilder);
director.constructComputer();
Computer computer = desktopBuilder.getResult();
System.out.println(computer);
}
}
在上面的示例中,我们定义了一个产品类Computer,它有三个属性:cpu、memory和storage。然后我们定义了一个抽象建造者接口ComputerBuilder,其中包含了创建产品各个部分的抽象方法。接下来,我们实现了具体建造者DesktopBuilder,它负责构建一个具体的Computer对象。最后,我们定义了一个指挥者Director,它知道具体建造者的构建顺序,并负责调用建造者的方法来构建产品。
在主函数中,我们创建了一个具体建造者DesktopBuilder和一个指挥者Director,并将具体建造者传递给指挥者。然后,我们调用指挥者的constructComputer方法来构建产品。最后,我们通过具体建造者的getResult方法获取构建完成的产品,并输出结果。