一、什么是建造者模式
建造者模式致力于将一个复杂对象分步创建,类似于我们要造一辆车,我要先拿到车架,再拿到发动机,再拿到变速箱,再拿到车玻璃,在拿到内饰,最后建造出一辆车。
二、建造者模式和工厂模式的区别
工厂模式更倾向于对使用方隐藏更多的细节,通过传入参数来决定最终创建什么对象,而建造者模式更倾向于给调用者一些自选的入口,让使用者最终决定产出的最终对象有何种表现形式。将决策权转交给使用方。建造者也更强调过程。
三、建造者模式如何实施
1.创建被创建对象
如下我们先定义一个Car作为被创建对象。
public class Car {
private String frame;
private String engine;
private String transmission;
private String glass;
private String interior;;
public Car(String frame, String engine, String transmission, String glass, String interior) {
this.frame = frame;
this.engine = engine;
this.transmission = transmission;
this.glass = glass;
this.interior = interior;
}
public String getFrame() {
return frame;
}
public void setFrame(String frame) {
this.frame = frame;
}
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
public String getTransmission() {
return transmission;
}
public void setTransmission(String transmission) {
this.transmission = transmission;
}
public String getGlass() {
return glass;
}
public void setGlass(String glass) {
this.glass = glass;
}
public String getInterior() {
return interior;
}
public void setInterior(String interior) {
this.interior = interior;
}
}
2.创建对应创建者
public class CarBuilder {
private String frame;
private String engine;
private String transmission;
private String glass;
private String interior;
public void setFrame(String frame) {
this.frame = frame;
}
public void setEngine(String engine) {
this.engine = engine;
}
public void setTransmission(String transmission) {
this.transmission = transmission;
}
public void setGlass(String glass) {
this.glass = glass;
}
public void setInterior(String interior) {
this.interior = interior;
}
public Car build(){
return new Car(frame,engine,transmission,glass,interior);
}
}
四、类图
五、使用场景
- Java lang的StringBuilder
- apache的HttpClientBuilder