空对象模式(Null Object Pattern)实战案例分析 —— 电商平台库存管理

30 篇文章 0 订阅
12 篇文章 0 订阅

image.png

肖哥弹架构 跟大家“弹弹” 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

在电商平台中,库存管理是一个关键环节。每个商品都应该有一个库存对象,但有时某些商品可能暂时无货或不存在,这时使用空对象模式可以避免空指针异常并简化业务逻辑。

2. 为什么要使用中介者设计模式

空对象模式通过提供一个有实际行为的非操作(null)对象,使得使用操作对象时不需要检查是否为null,从而简化代码。

3. 标准中介者设计模式图

4. 业务中介者设计模式图

5. 业务代码参考
// 商品类
class Product {
    private String name;
    private Stock stock;

    public Product(String name, Stock stock) {
        this.name = name;
        this.stock = stock;
    }

    public String getName() {
        return name;
    }

    public Stock getStock() {
        return stock;
    }
}

// 库存接口
interface Stock {
    boolean checkAvailability(int quantity);
    void replenish(int quantity);
}

// 真实库存类
class RealStock implements Stock {
    private int quantity;

    public RealStock(int quantity) {
        this.quantity = quantity;
    }

    @Override
    public boolean checkAvailability(int quantity) {
        return this.quantity >= quantity;
    }

    @Override
    public void replenish(int quantity) {
        this.quantity += quantity;
    }
}

// 空库存类
class NullStock implements Stock {
    @Override
    public boolean checkAvailability(int quantity) {
        return false;
    }

    @Override
    public void replenish(int quantity) {
        // 空实现,不做任何操作
    }
}

// 客户端使用
class ECommerceInventorySystem {
    public static void main(String[] args) {
        // 正常库存的商品
        Product productWithStock = new Product("手机", new RealStock(100));
        // 无库存的商品
        Product productWithoutStock = new Product("手机壳", new NullStock());

        // 检查商品库存并尝试下单
        if (productWithStock.getStock().checkAvailability(1)) {
            System.out.println("手机库存充足,可以下单。");
        } else {
            System.out.println("手机库存不足。");
        }

        // 尝试为无库存商品补货
        productWithoutStock.getStock().replenish(50);
        System.out.println("尝试为手机壳补货50件,但不会有任何变化,因为其库存对象是空对象。");
    }
}
6. 使用中介者设计模式的好处
  • 避免空指针异常:使用空对象模式可以避免在代码中频繁检查null值。
  • 简化业务逻辑:使得对所有商品的操作一致,无需特殊逻辑处理无库存情况。
7. 其他使用中介者设计模式场景参考
  • 用户权限检查:当用户没有特定权限时,提供一个空权限对象。
  • 日志记录:在不需要日志记录的情况下,使用空日志对象。
8. 可参考开源框架
  • Apache Commons BeanUtils:提供了一个NullBean类,它实现了BeanUtilsBean接口,但所有方法都为空实现。

总结

空对象模式提供了一个非侵入性的方式来处理null对象,使得业务逻辑更加简洁和易于维护。

历史热点文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solomon_肖哥弹架构

你的欣赏就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值