建造者模式
使用场景:
当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式
传统建造者实现如下:
一、创建抽象建造者
/**
* 抽象建造者
* @author HQ
* @date 2020/12/3 10:49
*/
abstract class Builder {
//方向盘
abstract void buildSteeringWheel();
//外壳
abstract void buildShell();
//轮子
abstract void buildWheel();
//窗户
abstract void buildWindow();
//内饰
abstract void buildInterior();
abstract Car getCar();
}
二、创建产品类
/**
* @author HQ
* @date 2020/12/3 10:54
*/
public class Car {
//方向盘
private String buildSteeringWheel;
//外壳
private String buildShell;
//轮子
private String buildWheel;
//窗户
private String buildWindow;
//内饰
private String buildInterior;
public String getBuildSteeringWheel() {
return buildSteeringWheel;
}
public void setBuildSteeringWheel(String buildSteeringWheel) {
this.buildSteeringWheel = buildSteeringWheel;
}
public String getBuildShell() {
return buildShell;
}
public void setBuildShell(String buildShell) {
this.buildShell = buildShell;
}
public String getBuildWheel() {
return buildWheel;
}
public void setBuildWheel(String buildWheel) {
this.buildWheel = buildWheel;
}
public String getBuildWindow() {
return buildWindow;
}
public void setBuildWindow(String buildWindow) {
this.buildWindow = buildWindow;
}
public String getBuildInterior() {
return buildInterior;
}
@Override
public String toString() {
return "Car{" +
"buildSteeringWheel='" + buildSteeringWheel + '\'' +
", buildShell='" + buildShell + '\'' +
", buildWheel='" + buildWheel + '\'' +
", buildWindow='" + buildWindow + '\'' +
", buildInterior='" + buildInterior + '\'' +
'}';
}
public void setBuildInterior(String buildInterior) {
this.buildInterior = buildInterior;
}
}
三、创建具体建造者类继承抽象建造者
/**
* B级车
* @author HQ
* @date 2020/12/3 10:57
*/
public class ABuilder extends Builder {
private Car car;
public ABuilder(){
car = new Car();
}
@Override
void buildSteeringWheel() {
car.setBuildSteeringWheel("多功能皮饰方向盘");
}
@Override
void buildShell() {
car.setBuildShell("红色跑车外观");
}
@Override
void buildWheel() {
car.setBuildWheel("米其林18寸轮胎");
}
@Override
void buildWindow() {
car.setBuildWindow("无框车窗");
}
@Override
void buildInterior() {
car.setBuildInterior("真皮内饰");
}
@Override
Car getCar() {
return car;
}
}
四、通过领导者创建产品实例
/**
* @author HQ
* @date 2020/12/3 11:05
*/
public class Director {
public Car create(Builder cb){
cb.buildSteeringWheel();
cb.buildShell();
cb.buildWheel();
cb.buildWindow();
cb.buildInterior();
return cb.getCar();
}
}
需要创建不同的车,只需写多一个对应具体建造者即可
如需要建造一辆普通车,只需添加一个相应建造者
/**
* B级车
* @author HQ
* @date 2020/12/3 10:57
*/
public class CarBuilder extends Builder {
private Car car;
public CarBuilder(){
car = new Car();
}
@Override
void buildSteeringWheel() {
car.setBuildSteeringWheel("多功能方向盘");
}
@Override
void buildShell() {
car.setBuildShell("红色外观");
}
@Override
void buildWheel() {
car.setBuildWheel("米其林轮胎");
}
@Override
void buildWindow() {
car.setBuildWindow("无框车窗");
}
@Override
void buildInterior() {
car.setBuildInterior("真皮内饰");
}
@Override
Car getCar() {
return car;
}
}