创建者模式是一种对象创建型设计模式,它通过将复杂的构建过程与表示分离,使得相同的创建过程可以创建不同的表示。这种模式在面对具有多个可选组成部分和多种组合方式的对象时尤为有用,如配置文件生成、复杂查询语句构造、产品装配等。
创建者模式包含以下核心组成部分:

getResult。假设我们要构建一个简单的电脑配置类(Computer),它包含CPU、内存、硬盘等多个组成部分,而这些组成部分有不同的选择。为了更好地封装构建过程,我们将使用创建者模式来设计代码。
Computer 是抽象产品,定义了所有电脑配置共有的属性和行为。
// 抽象产品 - 电脑配置
public abstract class Computer {
protected String cpu;
protected String ram;
protected String hardDisk;
public String getCpu() {
return cpu;
}
public String getRam() {
return ram;
}
public String getHardDisk() {
return hardDisk;
}
// 抽象方法用于展示配置详情
public abstract void display();
}
GamingComputer 是具体产品,继承自抽象产品并实现了具体的配置细节。
// 具体产品 - 高端游戏电脑配置
public class GamingComputer extends Computer {
public GamingComputer(String cpu, String ram, String hardDisk) {
super();
this.cpu = cpu;
this.ram = ram;
this.hardDisk = hardDisk;
}
@Override
public void display() {
System.out.println("Gaming Computer Configuration:");
System.out.println("CPU: " + cpu);
System.out.println("RAM: " + ram);
System.out.println("Hard Disk: " + hardDisk);
}
}
ComputerBuilder 是抽象建造者,声明了用来构建电脑配置的各项基本操作。
// 抽象建造者 - 电脑配置建造者
public abstract class ComputerBuilder {
protected Computer computer;
public abstract void buildCpu();
public abstract void buildRam();
public abstract void buildHardDisk();
// 返回最终的产品
public Computer getComputer() {
return computer;
}
}
GamingComputerBuilder 是具体建造者,通过覆盖抽象建造者中的方法,为高端游戏电脑配置具体的硬件组件。
// 具体建造者 - 高端游戏电脑配置建造者
public class GamingComputerBuilder extends ComputerBuilder {
public GamingComputerBuilder() {
computer = new GamingComputer("", "", "");
}
@Override
public void buildCpu() {
computer.cpu = "Intel Core i9-12900K";
}
@Override
public void buildRam() {
computer.ram = "32GB DDR5 RAM";
}
@Override
public void buildHardDisk() {
computer.hardDisk = "1TB NVMe SSD";
}
}
在客户端代码中,通过调用具体建造者的构建方法,一步步构建出所需的具体产品,并最终展示其配置信息。
// 客户端代码
public class Client {
public static void main(String[] args) {
// 创建具体建造者对象
ComputerBuilder builder = new GamingComputerBuilder();
// 按照流程构建电脑配置
builder.buildCpu();
builder.buildRam();
builder.buildHardDisk();
// 获取构建完成的电脑配置对象
Computer gamingComputer = builder.getComputer();
// 显示电脑配置信息
gamingComputer.display();
}
}
测试结果

创建者模式的优点在于:
封装性与解耦:创建者模式将复杂对象的构造过程与表示分离,客户端无需了解具体的构建细节,只需指定需要的产品类型或配置参数。这增强了系统的封装性和模块间的解耦。
产品一致性:创建者模式确保了无论何时通过建造者创建的产品,其内部结构都是一致的。即使在复杂的构建过程中,也能保持产品的完整性。
扩展性良好:当产品类增加新的属性或行为时,只需要修改相应的建造者类即可,不影响已有的代码和使用该模式的客户端代码。
便于并行构造:由于创建过程被分步实现,因此在某些情况下,可以并行执行各部分的构建工作,提高系统性能。
潜在挑战可能包括:
类数量增多:引入创建者模式后,会增加抽象建造者、具体建造者以及可选的指挥者等多个类,导致类的数量增多,一定程度上增加了系统的复杂性。
过度设计:如果产品的构建过程并不复杂或者变化较少,强制使用创建者模式可能会造成设计上的过度复杂化。
理解和调试难度:对于包含多个具体建造者的大型系统,理解各个建造者之间的关系和作用可能较为困难,特别是当建造过程涉及多层嵌套调用时,调试起来也可能较为复杂。
创建者模式通过将构建过程与表示分离,使得客户端只需关注构建过程本身而不必关心具体产品的内部构造细节。这不仅提高了系统的灵活性和可扩展性,也使代码更加清晰易读,降低了模块间的耦合度。然而,过度使用创建者模式可能导致类数量增多,应合理评估是否真正需要创建者模式来处理对象的创建过程。