建造者模式(Builder Pattern)是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,使得相同的构建过程可以创建不同的表示。
核心思想
将复杂对象的创建步骤分解开来,通过一步步的构建来完成对象的创建,隐藏构建的具体细节,从而使构造过程更加灵活。
组成
-
Builder(抽象建造者)
定义用于创建产品各部分的接口。 -
ConcreteBuilder(具体建造者)
实现抽象建造者接口,完成产品的具体部分构造。 -
Product(产品类)
表示复杂对象,包含多个组成部分。 -
Director(指挥者)
调用建造者中的方法按特定顺序来构建产品。
优缺点
- 优点
分离复杂构建过程与表示:提高代码的清晰性和可维护性。
易于扩展:可以通过添加新的具体建造者来扩展创建流程。
细节控制:通过指挥者可以按特定步骤控制产品的创建顺序。 - 缺点
生成器类的数量可能会增加,增加代码复杂度。
不适用于构造过程过于简单的场景。
代码实现示例
假设要创建一辆汽车,每辆车由车轮、发动机、车身等部分组成。
java">// 产品类
public class Car {private String engine;private String wheels;private String body;// Getter 和 Setterpublic void setEngine(String engine) {this.engine = engine;}public void setWheels(String wheels) {this.wheels = wheels;}public void setBody(String body) {this.body = body;}@Overridepublic String toString() {return "Car [engine=" + engine + ", wheels=" + wheels + ", body=" + body + "]";}
}
// 抽象建造者
public interface CarBuilder {void buildEngine();void buildWheels();void buildBody();Car getCar(); // 返回建造好的产品
}
// 具体建造者
public class SportsCarBuilder implements CarBuilder {private Car car;public SportsCarBuilder() {this.car = new Car();}@Overridepublic void buildEngine() {car.setEngine("V8 Engine");}@Overridepublic void buildWheels() {car.setWheels("Sports Wheels");}@Overridepublic void buildBody() {car.setBody("Sleek Sports Body");}@Overridepublic Car getCar() {return car;}
}
// 指挥者
public class Director {private CarBuilder builder;public Director(CarBuilder builder) {this.builder = builder;}public Car constructCar() {builder.buildEngine();builder.buildWheels();builder.buildBody();return builder.getCar();}
}
//客户端测试
public class Main {public static void main(String[] args) {// 创建具体建造者CarBuilder sportsCarBuilder = new SportsCarBuilder();// 指挥者控制构建过程Director director = new Director(sportsCarBuilder);// 构建产品Car sportsCar = director.constructCar();// 输出结果System.out.println(sportsCar);}
}
建造者模式适用场景
- 复杂对象的创建:当一个对象的创建涉及多个部分且需要特定顺序时。
- 多种构造方式:需要为同一产品创建不同的表示。
- 隔离创建细节:需要隐藏产品的构建细节时。
- 如果你需要进一步探索建造者模式的高级用法或其他设计模式,随时告诉我!