构建者是一种用于创建对象时将对象的构建过程和表示分离的设计模式,适用于构造过程复杂的对象和创建需要多种变化的场景使用.
例如一个汽车是一个抽象概念,车会具体到很多种,不同的发动机,车身,轮胎等等构建一个具体的车,所以这个具体对象创建有很多种可能.因此可以使用构建者设计模式
代码示例:
public class Car{
private Engine engine; //发动机
private Tire tire; //轮胎
private Body body; //车身
//私有化构造方法,让外部无法创建对象
private Car(Builer builder){
this.engine = builder.engine;
this.tire = builder.tire;
this.body = builder.body;
}
//构建者内部类
public static class Builder{
private Engine engine; //发动机
private Tire tire; //轮胎
private Body body; //车身
public Builder setEngine(Engine engine){
this.engine = engine;
return this;
}
public Builder setTire(Tire tire){
this.tire= tire;
return this;
}
public Builder setBody(Body body){
this.body= body;
return this;
}
public Car build(){
return new Car(this);
}
}
}
Car car = new Car.Builder().setEngine(new Engine("V8")).setTire(new Tire("20 inch")).setBody(new Body("Sedan")).build();
优点:构建者能够让构建过程更加清晰明了
调用者不知道内部的构建细节
可以写多个构建者,用不同的方式构建同样的对象
新的构建者不影响已有的代码,符合开闭原则
缺点:增加了代码量
简单的对象创建用不到,强行使用会导致大量的构建者让代码复杂
构建者创建的对象如果没有set方法,就不能修改了.