关于java:设计模式三建造者模式

什么是建造者模式

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

类图如下:

欢送关注我的公众号,一起学习技术。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理