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 Pattern)