什么是建造者模式
官网的定义: 将一个简单对象的构建与其示意拆散,使得同样的构建过程能够创立不同的示意 。在理论工作中,用得较多的状况是初始化一个有很多属性的对象,而这些属性有的是必须的,有的是可选的。如果不应用建造者模式,要么须要创立较多的构造方法,要么调用多个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); }}
类图如下:
欢送关注我的公众号,一起学习技术。