建造者模式
简单方式
class Product
{
private final String part1;
private final String part2;
private final String part3;
private final String part4;
// .....
public Product(String part1, String part2, String part3, String part4) {
this.part1 = part1;
this.part2 = part2;
this.part3 = part3;
this.part4 = part4;
}
public String getPart1() {
return part1;
}
public String getPart2() {
return part2;
}
public String getPart3() {
return part3;
}
public String getPart4() {
return part4;
}
@Override
public String toString() {
return "Product{" +
"part1='" + part1 + ''' +
", part2='" + part2 + ''' +
", part3='" + part3 + ''' +
", part4='" + part4 + ''' +
'}';
}
static class Builder
{
private String part1;
private String part2;
private String part3;
private String part4;
public Builder builderPart1(String part1) {
this.part1 = part1;
return this;
}
public Builder builderPart2(String part2) {
this.part2 = part2;
return this;
}
public Builder builderPart3(String part3) {
this.part3 = part3;
return this;
}
public Builder builderPart4(String part4) {
this.part4 = part4;
return this;
}
Product build() {
return new Product(part1, part2, part3, part4);
}
}
//使用方式
public class BuilderTest2
{
public static void main(String[] args) {
Product.Builder builder = new Product.Builder().builderPart1("part1").builderPart2("part2");
if (true) {
builder.builderPart3("part3");
}
Product.Builder part4 = builder.builderPart4("part4");
Product product = part4.build();
System.out.println(product);
}
}
源码中常用
产品对象信息
public class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public void setPartC(String partC) {
this.partC = partC;
}
@Override
public String toString() {
return "Product{" +
"partA='" + partA + ''' +
", partB='" + partB + ''' +
", partC='" + partC + ''' +
'}';
}
}
建造者
abstract class Builder {
//创建产品对象
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//返回产品对象
public Product build() {
return product;
}
}
建造者实现
public class ConcreteBuilder extends Builder {
public void buildPartA() {
product.setPartA("设置 PartA");
}
public void buildPartB() {
product.setPartB("设置 PartB");
}
public void buildPartC() {
product.setPartC("设置 PartC");
}
}
对象组装
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//产品构建与组装方法
public Product construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.build();
}
}
使用测试
public class Client
{
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.construct();
System.out.println(product.toString());
}
}
源码实例–Jwts