Java设计模式Builder建造者模式,Builder设计模式简单代码示例

Posted Acmen-zym

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式Builder建造者模式,Builder设计模式简单代码示例相关的知识,希望对你有一定的参考价值。

示例代码应用场景
在创建对象然后进行赋值的时,如果参数过多可能会造成部分重要参数没有set,用Builder进行赋值可以对必须值进行判断防止出现重要参数遗漏检测,例如下面示例代码中我调用build时我对价格是否为null进行了判定

public class CommodityInstance {
    private Long consulTaskId; // 任务外键

    private Long productId;// 产品外键 ,这个商品是通过哪个产品实例化的

    private Long picId; // 这个SKU属性值所对应的图片ID

    private String propValue; // sku属性值

    private Long quantity;// 库存

    private String outerId;// 商品编码

    private Double price;// 价格

    public CommodityInstance(Builder builder) {
        this.consulTaskId = builder.consulTaskId;
        this.productId = builder.productId;
        this.propValue = builder.propValue;
        this.quantity = builder.quantity;
        this.outerId = builder.outerId;
        this.price = builder.price;
        this.picId = builder.picId;
    }


    public static class Builder {
        private Long consulTaskId; // 任务外键

        private Long productId;// 产品外键 ,这个商品是通过哪个产品实例化的

        private String propValue; // sku属性值

        private Long picId; // 这个SKU属性值所对应的图片ID

        private Long quantity;// 库存

        private String outerId;// 商品编码

        private Double price;// 价格

        public Builder consulTaskId(Long consulTaskId) {
            this.consulTaskId = consulTaskId;
            return this;
        }

        public Builder picId(Long picId) {
            this.picId = picId;
            return this;
        }

        public Builder productId(Long productId) {
            this.productId = productId;
            return this;
        }

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

        public Builder quantity(Long quantity) {
            this.quantity = quantity;
            return this;
        }

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

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

        public CommodityInstance build() {
            if (this.price == null) throw new NullPointerException("商品价格不能为空");
            return new CommodityInstance(this);
        }
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CommodityInstance that = (CommodityInstance) o;
        return propValue != null ? propValue.equals(that.propValue) : that.propValue == null;
    }

    @Override
    public int hashCode() {
        int result = 31 + (propValue != null ? propValue.hashCode() : 0);
        return result;
    }
}

使用代码示例

 CommodityInstance commodity = new CommodityInstance.Builder()
                    .consulTaskId(consulTask.getId())
                    .price(x.getPrice())
                    .picId(x.getId())
                    .outerId(x.getOuterId())
                    .propValue(x.getPropValue())
                    .productId(x.getProductId())
                    .quantity(x.getQuantity()).build();

本次只是进行简单的演示,在Builder建造者模式中每个方法还可以进行更多有趣操作,可以将更多业务代码隐藏起来,例如下图
在这里插入图片描述
在这里插入图片描述
这样使用就可以隐藏很多业务实现的细节,调用者只需要关心最终为他构建的什么样的对象数据就可以了

以上是关于Java设计模式Builder建造者模式,Builder设计模式简单代码示例的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式--------建造者模式(Builder模式)

java设计模式--建造者模式(Builder)

Java建造者模式(Builder pattern)

Java设计模式之建造者模式(Builder Pattern)

Java设计模式之建造者模式(Builder Pattern)

Java设计模式Builder建造者模式,Builder设计模式简单代码示例