构建器模式(Builder Pattern)与传统对象创建方式的对比

传统对象创建方式


// 方式1:空构造+Setter
ShoppingCart cart = new ShoppingCart();
cart.setUserId(123L);
cart.setItemId(1001);

// 方式2:全参构造
ShoppingCart cart = new ShoppingCart(
    123L, 1001, "商品A", 2, ...);

特点

  • 需要显式调用多个setter方法

  • 全参构造需要严格参数顺序

  • 对象状态分步构建,存在中间不一致状态

构建器模式

ShoppingCart cart = ShoppingCart.builder()
    .userId(123L)
    .itemId(1001)
    .name("商品A")
    .build();

特点

  • 链式方法调用

  • 参数设置顺序自由

  • 通过build()一次性生成完整对象

  • 支持可选参数和默认值


2. 代码示例解析

原始代码


ShoppingCart shoppingCart = ShoppingCart.builder()
                .userId(BaseContext.getCurrentId()).build();
List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);

等效传统实现

ShoppingCart query = new ShoppingCart();
query.setUserId(BaseContext.getCurrentId());
// 需要显式设置其他字段为null(如果必要)
List<ShoppingCart> list = shoppingCartMapper.list(query);

3. 构建器模式的实现原理

Lombok生成的Builder结构

public class ShoppingCart {
    private Long userId;
    private Long itemId;
    // 其他字段...
    
    @Builder
    public static class Builder {
        private Long userId;
        private Long itemId;
        
        public Builder userId(Long userId) {
            this.userId = userId;
            return this;
        }
        
        public ShoppingCart build() {
            ShoppingCart cart = new ShoppingCart();
            cart.setUserId(this.userId);
            // 其他字段设置...
            return cart;
        }
    }
}
 

4. 对比维度

维度传统方式构建器模式
代码可读性低(分散的setter调用)高(链式调用)
参数灵活性需要处理所有参数按需设置可选参数
线程安全性分步设置可能产生中间状态build()生成完整对象
可维护性修改参数需调整多处只需修改Builder类
适合场景<5个参数的简单对象复杂对象/多可选参数场景

5. 最佳实践建议

  1. 优先使用构建器模式

    • 对象有超过4个属性

    • 存在多个可选参数

    • 需要创建不可变对象

    • 参数之间存在依赖关系(如校验逻辑)

  2. 适合使用传统方式当

    • 简单值对象(如仅包含id和name)

    • 需要快速原型开发

    • 明确知道所有参数值

  3. 注意事项

    • 避免构建器过度设计:简单对象不需要Builder

    • 对必填字段应在build()方法中做校验

    • 考虑使用Lombok简化代码


6. 性能考量

操作传统方式构建器模式
对象创建速度稍慢(需创建Builder实例)
内存占用略高(临时Builder对象)
可维护性成本
扩展性优秀

注意:在非高频创建场景下,性能差异可忽略不计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值