提升代码能力之构造者模式创建对象

目录

使用场景

构造者模式创建对象

 引入依赖

构造者创建对象


使用场景

        适用于实体类的属性比较多时,因此当我们通过new的方式创建对象时,一般来说我们需要逐个字段的去赋值

举个实体类例子,如下:

public class TradeUserSpuOrderBean {

    public TradeUserSpuOrderBean(String stt, String edt, String trademarkId, String trademarkName, String category1Id, String category1Name, String category2Id, String category2Name, String category3Id, String category3Name, Set<String> orderIdSet, String skuId, String userId, String spuId, String spuName, Long orderCount, Double orderAmount, Long ts) {
        this.stt = stt;
        this.edt = edt;
        this.trademarkId = trademarkId;
        this.trademarkName = trademarkName;
        this.category1Id = category1Id;
        this.category1Name = category1Name;
        this.category2Id = category2Id;
        this.category2Name = category2Name;
        this.category3Id = category3Id;
        this.category3Name = category3Name;
        this.orderIdSet = orderIdSet;
        this.skuId = skuId;
        this.userId = userId;
        this.spuId = spuId;
        this.spuName = spuName;
        this.orderCount = orderCount;
        this.orderAmount = orderAmount;
        this.ts = ts;
    }

    // 窗口起始时间
    String stt;
    // 窗口结束时间
    String edt;
    // 品牌 ID
    String trademarkId;
    // 品牌名称
    String trademarkName;
    // 一级品类 ID
    String category1Id;
    // 一级品类名称
    String category1Name;
    // 二级品类 ID
    String category2Id;
    // 二级品类名称
    String category2Name;
    // 三级品类 ID
    String category3Id;
    // 三级品类名称
    String category3Name;

    // 订单 ID
    Set<String> orderIdSet;

    // sku_id
    String skuId;

    // 用户 ID
    String userId;
    // spu_id
    String spuId;
    // spu 名称
    String spuName;
    // 下单次数
    Long orderCount;
    // 下单金额
    Double orderAmount;
    // 时间戳
    Long ts;
}

        可以看到,我们new对象时,如果没有空参构造函数,那么就需要每个属性逐个的去赋值,十分的麻烦,而且就算有空参构造,那么赋值的时候,也需要set方法,同样不方便,那么是否有方法可以只赋值想要的属性,不赋值的属性使用默认值,然后创建一个对象

构造者模式创建对象

 引入依赖

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

对实体类使用注解@Builder

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import java.util.Set;

@Data
@AllArgsConstructor
@Builder
public class TradeUserSpuOrderBean {

    // 窗口起始时间
    String stt;
    // 窗口结束时间
    String edt;
    // 品牌 ID
    String trademarkId;
    // 品牌名称
    String trademarkName;
    // 一级品类 ID
    String category1Id;
    // 一级品类名称
    String category1Name;
    // 二级品类 ID
    String category2Id;
    // 二级品类名称
    String category2Name;
    // 三级品类 ID
    String category3Id;
    // 三级品类名称
    String category3Name;

    // 订单 ID
    @TransientSink
    Set<String> orderIdSet;

    // sku_id
    @TransientSink
    String skuId;

    // 用户 ID
    String userId;
    // spu_id
    String spuId;
    // spu 名称
    String spuName;
    // 下单次数
    Long orderCount;
    // 下单金额
    Double orderAmount;
    // 时间戳
    Long ts;
}

构造者创建对象

TradeUserSpuOrderBean test = TradeUserSpuOrderBean.builder()
                       				 .skuId(jsonObject.getString("sku_id"))
                        			 .userId(jsonObject.getString("user_id"))
                       				 .orderAmount(jsonObject.getDouble("split_total_amount"))
                       				 .orderIdSet(orderIds)
                       				 .ts(DateFormatUtil.toTs(jsonObject.getString("create_time"), true))
                       				 .build();

可以看到我们只需要对想要赋值的属性赋值即可,不用每个属性都赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值