建造者模式
建造者模式
建造者模式是一种创建型设计模式。它允许你分步骤创建复杂对象,将对象的构造过程与其表现进行解耦,从而使得同样的构建过程可以产生不同的表现形式。
使用场景
在以下情况下应该使用建造者模式:
- 当你需要创建复杂对象,并且该对象需要通过多个组件进行初始化。
- 当你希望通过改变对象构造过程的顺序,或者动态更换组件,来生成不同的对象表现形式。
组成部分
建造者模式主要包含以下组成部分:
- Builder:为创建产品对象的各个部件指定抽象接口。
- Concrete Builder:实现Builder接口,并构造表示产品的对象。
- Product:表示被构造的复杂对象。它通常包含多个部件。
- Director:构建一个使用Builder接口的对象。
优缺点
优点:
- 构造代码与表示代码分离,由于Builder隐藏了该产品是如何组装的,所以产品内部可以变化而不影响使用它的代码。
- 强制实施了一种分步骤构建过程,这让我们能够更好地控制该对象的构建。
- 允许您生成不同表现形式的对象,而在不同表现形式之间共享相同的构造代码。
缺点:
- 由于建造者模式需要创建许多小型的类,因此会增加系统的复杂性和理解难度。
示例代码
public class Car {
private String engine;
private String wheels;
private String body;
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
public String getWheels() {
return wheels;
}
public void setWheels(String wheels) {
this.wheels = wheels;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
public interface CarBuilder {
public void buildEngine();
public void buildWheels();
public void buildBody();
public Car getCar();
}
public class SportsCarBuilder implements CarBuilder {
private Car car;
public SportsCarBuilder() {
car = new Car();
}
public void buildEngine() {
car.setEngine("V8");
}
public void buildWheels() {
car.setWheels("18");
}
public void buildBody() {
car.setBody("Carbon Fiber");
}
public Car getCar() {
return car;
}
}
public class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder) {
this.builder = builder;
}
public void construct() {
builder.buildEngine();
builder.buildWheels();
builder.buildBody();
}
}
以上代码演示了如何使用建造者模式创建汽车对象。在这个示例中,Car是要构建的复杂对象,而SportsCarBuilder是针对SportsCar的具体生成器的实现。CarDirector是导演类,它维护Builder接口,并负责构建一个使用这个接口的对象。通过使用Builder接口,我们可以将复杂对象的创建过程分解为多个简单的步骤。在这些步骤中,我们可以动态更换组件,并且使用相同的步骤来构建完全不同的对象。