什么是建造者模式
官网的定义:将一个简单对象的构建与其示意拆散,使得同样的构建过程能够创立不同的示意。在理论工作中,用得较多的状况是初始化一个有很多属性的对象,而这些属性有的是必须的,有的是可选的。如果不应用建造者模式,要么须要创立较多的构造方法,要么调用多个 setter 办法。
实现形式
- Product:具体的产品对象。
- Builder:建造者的形象基类(有时会应用接口代替)。其定义了构建 Product 的形象步骤,其实体类须要实现这些步骤。其会蕴含一个用来返回最终产品的办法
Product getProduct()
。 - ConcreteBuilder:Builder 的实现类。
- Director:构建一个应用 Builder 接口的对象。它次要是用于创立一个简单的对象。在比较简单的状况下,间接在客户端调用 Builder 对象即可。
这里应用建造者模式来构建一个属性较多的对象,代码如下:
// 具体产品
public class Product {
private String attr1;
private String attr2;
private String attr3;
private String attr4;
public Product() {}
public Product(String attr1, String attr2) {
this.attr1 = attr1;
this.attr2 = attr2;
}
public String getAttr1() {return attr1;}
public void setAttr1(String attr1) {this.attr1 = attr1;}
public String getAttr2() {return attr2;}
public void setAttr2(String attr2) {this.attr2 = attr2;}
public String getAttr3() {return attr3;}
public void setAttr3(String attr3) {this.attr3 = attr3;}
public String getAttr4() {return attr4;}
public void setAttr4(String attr4) {this.attr4 = attr4;}
@Override
public String toString() {
return "Product{" +
"attr1='" + attr1 + '\'' +
", attr2='" + attr2 + '\'' +
", attr3='" + attr3 + '\'' +
", attr4='" + attr4 + '\'' +
'}';
}
}
// 形象建造者
public abstract class Builder {public abstract Builder buildAttr3();
public abstract Builder buildAttr4();
public abstract Product getProduct();}
// 具体建造者
public class ProductBuilder extends Builder {
private Product product;
public ProductBuilder(String attr1, String attr2) {product = new Product(attr1,attr2);
}
@Override
public Builder buildAttr3() {product.setAttr3("Product attr3");
return this;
}
@Override
public Builder buildAttr4() {product.setAttr4("Product attr4");
return this;
}
@Override
public Product getProduct() {return product;}
}
// 调用者
public class TestBuilder {public static void main(String[] args) {Product product = new ProductBuilder("product attr1", "product attr2")
.buildAttr3()
.buildAttr4()
.getProduct();
System.out.println(product);
}
}
类图如下:
欢送关注我的公众号,一起学习技术。