定义需要创建的实体类
package builder;
/**
* @Auther: 苏察哈尔丶灿
* @Date: 2020/8/7 11:29
* @Slogan: 我自横刀向天笑,笑完我就去睡觉。
*/
public class Product {
private String param1;
private String param2;
private String param3;
private String param4;
private String param5;
public Product() {
}
public Product(String param1, String param2, String param3, String param4, String param5) {
this.param1 = param1;
this.param2 = param2;
this.param3 = param3;
this.param4 = param4;
this.param5 = param5;
}
public String getParam1() {
return param1;
}
public void setParam1(String param1) {
this.param1 = param1;
}
public String getParam2() {
return param2;
}
public void setParam2(String param2) {
this.param2 = param2;
}
public String getParam3() {
return param3;
}
public void setParam3(String param3) {
this.param3 = param3;
}
public String getParam4() {
return param4;
}
public void setParam4(String param4) {
this.param4 = param4;
}
public String getParam5() {
return param5;
}
public void setParam5(String param5) {
this.param5 = param5;
}
@Override
public String toString() {
return "Product{" +
"param1='" + param1 + '\'' +
", param2='" + param2 + '\'' +
", param3='" + param3 + '\'' +
", param4='" + param4 + '\'' +
", param5='" + param5 + '\'' +
'}';
}
}
定义所有构建者的接口
package builder;
/**
* @Auther: 苏察哈尔丶灿
* @Date: 2020/8/7 11:38
* @Slogan: 我自横刀向天笑,笑完我就去睡觉。
*/
public interface IProductBuilder {
void builderParam1(String param1);
void builderParam2(String param2);
void builderParam3(String param3);
void builderParam4(String param4);
void builderParam5(String param5);
Product build();
}
设置引导类去执行构建者
package builder;
/**
* @Auther: 苏察哈尔丶灿
* @Date: 2020/8/7 13:54
* @Slogan: 我自横刀向天笑,笑完我就去睡觉。
*/
public class Director {
// 持有构建者
private IProductBuilder builder;
public Director(IProductBuilder builder) {
this.builder = builder;
}
public Product makeProduct(String param1, String param2, String param3, String param4, String param5) {
builder.builderParam1(param1);
builder.builderParam2(param2);
builder.builderParam3(param3);
builder.builderParam4(param4);
builder.builderParam5(param5);
Product product = builder.build();
return product;
}
}
至此,空壳已经搭建完成
后续可以按照业务需求定义不同的构建者类,用引导类去完成类的实例化
默认构建者类:
package builder;
/**
* @Auther: 苏察哈尔丶灿
* @Date: 2020/8/7 13:50
* @Slogan: 我自横刀向天笑,笑完我就去睡觉。
*/
public class DefaultConcreteProductBuilder implements IProductBuilder {
private String param1;
private String param2;
private String param3;
private String param4;
private String param5;
@Override
public void builderParam1(String param1) {
this.param1 = param1;
}
@Override
public void builderParam2(String param2) {
this.param2 = param2;
}
@Override
public void builderParam3(String param3) {
this.param3 = param3;
}
@Override
public void builderParam4(String param4) {
this.param4 = param4;
}
@Override
public void builderParam5(String param5) {
this.param5 = param5;
}
@Override
public Product build() {
return new Product(this.param1, this.param2, this.param3, this.param4, this.param5);
}
}
特殊构建者类:
package builder;
/**
* @Auther: 苏察哈尔丶灿
* @Date: 2020/8/7 13:50
* @Slogan: 我自横刀向天笑,笑完我就去睡觉。
*/
public class SpecialConcreteProductBuilder implements IProductBuilder {
private String param1;
private String param2;
private String param3;
private String param4;
private String param5;
@Override
public void builderParam1(String param1) {
this.param1 = "特殊建造者:" + param1;
}
@Override
public void builderParam2(String param2) {
this.param2 = "特殊建造者:" + param2;
}
@Override
public void builderParam3(String param3) {
this.param3 = "特殊建造者:" + param3;
}
@Override
public void builderParam4(String param4) {
this.param4 = "特殊建造者:" + param4;
}
@Override
public void builderParam5(String param5) {
this.param5 = "特殊建造者:" + param5;
}
@Override
public Product build() {
return new Product(this.param1, this.param2, this.param3, this.param4, this.param5);
}
}
还可根据业务扩展更多类,测试用例如下:
package builder;
/**
* @Auther: 苏察哈尔丶灿
* @Date: 2020/8/7 11:32
* @Slogan: 我自横刀向天笑,笑完我就去睡觉。
*/
public class Test {
public static void main(String[] args) {
DefaultConcreteProductBuilder dcp = new DefaultConcreteProductBuilder();
Director director = new Director(dcp);
Product product = director.makeProduct("param1", "param2", "param3", "param4", "param5");
System.out.println(product);
System.out.println("=========特殊建造者建造对象===========");
SpecialConcreteProductBuilder scp = new SpecialConcreteProductBuilder();
Director director2 = new Director(scp);
Product product2 = director2.makeProduct("param1", "param2", "param3", "param4", "param5");
System.out.println(product2);
}
}
执行结果如下: