建造者模式
为什么要使用建造模式
当一个类特别复杂,需要很多种构造函数进行构造,而且一旦构造成功后,值不允许变更
比如需要构建一个汽车,我有个汽车的工厂,我这个汽车工厂可以生产跑车 suv 小轿车,甚至还可以生产三轮车,还需要根据不同的颜色进行生产,但是一旦生产完成,我的值不允许被变动,而且比如生产三轮车,那传入的轮子的个数是3,需要根据3来判断是否是三轮车,需要根据参数是顺序来判断具体生产什么样的车出来。 比如 类型–轮子–颜色–混动–name
当我类型是三轮车的时候我的轮子的个数传入只能是3 当我的颜色是红色的时候我就不能生产混动的车型等等
如果我用普通的构造函数,可能需要写上十种构造函数进行
但是我用建造者模式,我只用传入想要的属性我就可以直接生产对应的汽车出来
优点:适合构建复杂对象,并且通过链式编程能更直观的展示,代码维护起来更加方便
缺点:不适合简单对象,会增加系统的复杂度
package com.example.demo.study.builder;
/**
* @Author zhanpeng
* @Date 2023/5/22 18:31
*/
public class Car {
private final String name;
private final String type;
private final String color;
private final Integer tire;
private final Boolean hybrid;
private Car(CarBuilder carBuilder) {
this.name = carBuilder.name;
this.type = carBuilder.type;
this.color = carBuilder.color;
this.tire = carBuilder.tire;
this.hybrid = carBuilder.hybrid;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", type='" + type + '\'' +
", color='" + color + '\'' +
", tire=" + tire +
", hybrid=" + hybrid +
'}';
}
public static class CarBuilder {
private String name;
private String type;
private String color;
private Integer tire;
private Boolean hybrid;
public CarBuilder buildName(String name) {
this.name = name;
return this;
}
public CarBuilder buildType(String type) {
this.type = type;
return this;
}
public CarBuilder buildColor(String color) {
this.color = color;
return this;
}
public CarBuilder buildTire(Integer tire) {
this.tire = tire;
return this;
}
public CarBuilder buildHybrid(Boolean hybrid) {
this.hybrid = hybrid;
return this;
}
public Car build() {
return new Car(this);
}
}
}
测试类
public static void main(String [] args){
Car build = new Car.CarBuilder()
.buildType("跑车")
.buildTire(4)
.buildColor("红色")
.buildHybrid(false)
.buildName("兰博基尼")
.build();
System.out.println("build = " + build);
}