23种设计模式-构建者模式(Builder)

作用:帮着构建复杂对象;(如:自定义view)

也称为Builder 模式,可能没写过但一定都见过。
首先是一个非常复杂的对象,虽然构造方法很简单但是它的使用很灵活有很多可配置项。这个时候我们new一个然后看源码一项项去配置明显需要很多功夫。有没有一个方式可以让我们只需要关注到它可以配置的项呢。有,构建者。帮着我们创建复杂的对象。

构建的三种方式:

针对Product类构建

public class Product {
    private int id;
    private String name;
    private int type;
    private float price;
}
  • 构造器重载
public class Product {
    private int id;
    private String name;
    private int type;
    private float price;

    public Product(int id) {
        this.id = id;
    }
。。。

    public Product(int id, String name) {
        this.id = id;
        this.name = name;
    }
。。。

    public Product(int id, String name, int type) {
        this.id = id;
        this.name = name;
        this.type = type;
    }
。。。

    public Product(int id, String name, int type, float price) {
        this.id = id;
        this.name = name;
        this.type = type;
        this.price = price;
    }
}

理论上这种构建方式我们需要生成xxxx非常多的构造方法

  • javaBeans方式
public class Product {
    private int id;
    private String name;
    private int type;
    private float price;

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setType(int type) {
        this.type = type;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

相比简单了很多,但是,因为构造过程被分到了几个调用中,在构造过程中JavaBeans可能处于不一致的状态,类无法仅仅通过检验构造器参数的有效性来保证一致性。

  • builder模式
 public class Product {
    private int id;
    private String name;
    private int type;
    private float price;

    public Product(Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
        this.type = builder.type;
        this.price = builder.price;
    }

    public static class Builder {
        private int id;
        private String name;
        private int type;
        private float price;

        public Builder id(int id) {
            this.id = id;
            return this;
        }

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public Builder type(int type) {
            this.type = type;
            return this;
        }

        public Builder price(float price) {
            this.price = price;
            return this;
        }

        public Product build() {
            return new Product(this);
        }
    }
}
 Product p = new Product.Builder()
                .id(10)
                .name("phone")
                .price(100)
                .type(1)
                .build();

先通过某种方式取得构造对象需要的所有参数,然后通过这些参数一次性构造这个对象

你可能感兴趣的:(23种设计模式-构建者模式(Builder))