建造者模式:将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
核心思想:通过分步构建对象,避免构造函数参数过多,提高代码的可读性和灵活性。
假设你正在开发一个电脑定制系统,用户可以根据自己的需求选择不同的硬件配置(如CPU、内存、硬盘、显卡等)。电脑的配置组合非常复杂,如果使用传统的构造函数或Setter方法,会导致代码冗长且难以维护。建造者模式可以很好地解决这个问题。
1. 产品类 (Computer)
public class Computer {
private String cpu;
private String memory;
private String storage;
private String gpu;
public void setCpu(String cpu) {
this.cpu = cpu;
}
public void setMemory(String memory) {
this.memory = memory;
}
public void setStorage(String storage) {
this.storage = storage;
}
public void setGpu(String gpu) {
this.gpu = gpu;
}
@Override
public String toString() {
return "Computer{" +
"cpu='" + cpu + '\'' +
", memory='" + memory + '\'' +
", storage='" + storage + '\'' +
", gpu='" + gpu + '\'' +
'}';
}
}
2. 建造者接口 (ComputerBuilder)
public interface ComputerBuilder {
void buildCpu();
void buildMemory();
void buildStorage();
void buildGpu();
Computer getComputer();
}
3. 具体建造者 (GamingComputerBuilder, OfficeComputerBuilder)
游戏电脑建造者
public class GamingComputerBuilder implements ComputerBuilder {
private Computer computer;
public GamingComputerBuilder() {
this.computer = new Computer();
}
@Override
public void buildCpu() {
computer.setCpu("Intel i9");
}
@Override
public void buildMemory() {
computer.setMemory("32GB DDR5");
}
@Override
public void buildStorage() {
computer.setStorage("1TB SSD");
}
@Override
public void buildGpu() {
computer.setGpu("NVIDIA RTX 4090");
}
@Override
public Computer getComputer() {
return computer;
}
}
办公电脑建造者
public class OfficeComputerBuilder implements ComputerBuilder {
private Computer computer;
public OfficeComputerBuilder() {
this.computer = new Computer();
}
@Override
public void buildCpu() {
computer.setCpu("Intel i5");
}
@Override
public void buildMemory() {
computer.setMemory("16GB DDR4");
}
@Override
public void buildStorage() {
computer.setStorage("512GB SSD");
}
@Override
public void buildGpu() {
computer.setGpu("Integrated GPU");
}
@Override
public Computer getComputer() {
return computer;
}
}
4. 指挥者 (ComputerDirector)
public class ComputerDirector {
private ComputerBuilder computerBuilder;
public ComputerDirector(ComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public void constructComputer() {
computerBuilder.buildCpu();
computerBuilder.buildMemory();
computerBuilder.buildStorage();
computerBuilder.buildGpu();
}
public Computer getComputer() {
return computerBuilder.getComputer();
}
}
5. 客户端代码
public class ComputerBuilderDemo {
public static void main(String[] args) {
// 创建游戏电脑
ComputerBuilder gamingBuilder = new GamingComputerBuilder();
ComputerDirector gamingDirector = new ComputerDirector(gamingBuilder);
gamingDirector.constructComputer();
Computer gamingComputer = gamingDirector.getComputer();
System.out.println("游戏电脑配置: " + gamingComputer);
// 创建办公电脑
ComputerBuilder officeBuilder = new OfficeComputerBuilder();
ComputerDirector officeDirector = new ComputerDirector(officeBuilder);
officeDirector.constructComputer();
Computer officeComputer = officeDirector.getComputer();
System.out.println("办公电脑配置: " + officeComputer);
}
}
6. 输出
游戏电脑配置: Computer{cpu='Intel i9', memory='32GB DDR5', storage='1TB SSD', gpu='NVIDIA RTX 4090'}
办公电脑配置: Computer{cpu='Intel i5', memory='16GB DDR4', storage='512GB SSD', gpu='Integrated GPU'}
业务场景总结
-
问题:电脑配置复杂,直接使用构造函数或Setter方法会导致代码冗长且难以维护。
-
解决方案:使用建造者模式,将电脑的构建过程分解为多个步骤,并通过指挥者统一管理。
-
优点:
-
分离构建过程与表示,代码更清晰。
-
支持灵活扩展,新增配置类型只需增加新的建造者。
-
避免构造函数参数过多,提高代码可读性。
-
其他业务场景
-
订餐系统:用户可以选择不同的菜品组合(如主食、饮料、甜点),建造者模式用于构建订单。
-
文档生成:生成复杂的文档(如PDF、Word),建造者模式用于分步构建文档内容。
-
车辆制造:汽车的不同配置(如发动机、轮胎、内饰),建造者模式用于构建车辆对象。
建造者模式的核心思想是分步构建复杂对象,适用于需要灵活创建对象的场景。
1052

被折叠的 条评论
为什么被折叠?



