![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0abb559b0b8f4c138873bd5378d6224b.png)
经典写法
// Product
class Product {
private String partA;
private String partB;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
@Override
public String toString() {
return "Product{" +
"partA='" + partA + '\'' +
", partB='" + partB + '\'' +
'}';
}
}
// Builder
interface Builder {
void buildPartA();
void buildPartB();
Product getResult();
}
// ConcreteBuilder
class ConcreteBuilder implements Builder {
private Product product = new Product();
public void buildPartA() {
product.setPartA("Part A built");
}
public void buildPartB() {
product.setPartB("Part B built");
}
public Product getResult() {
return product;
}
}
// Director
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct() {
builder.buildPartA();
builder.buildPartB();
return builder.getResult();
}
}
// Client
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);
}
}
流式写法
// Product
class Product {
private String partA;
private String partB;
public Product setPartA(String partA) {
this.partA = partA;
return this;
}
public Product setPartB(String partB) {
this.partB = partB;
return this;
}
@Override
public String toString() {
return "Product{" +
"partA='" + partA + '\'' +
", partB='" + partB + '\'' +
'}';
}
}
// Builder
interface Builder {
Builder buildPartA(String partA);
Builder buildPartB(String partB);
Product getResult();
}
// ConcreteBuilder
class ConcreteBuilder implements Builder {
private Product product = new Product();
public Builder buildPartA(String partA) {
product.setPartA(partA);
return this;
}
public Builder buildPartB(String partB) {
product.setPartB(partB);
return this;
}
public Product getResult() {
return product;
}
}
// Director
class Director {
private Builder builder;
public Director withBuilder(Builder builder) {
this.builder = builder;
return this;
}
public Product construct() {
return builder.getResult();
}
}
// Client
public class Client {
public static void main(String[] args) {
Product product = new Director()
.withBuilder(new ConcreteBuilder()
.buildPartA("Part A built")
.buildPartB("Part B built"))
.construct();
System.out.println(product);
}
}