头图

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

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对象,使得业务逻辑更加简洁和易于维护。

历史热点文章


肖哥弹架构
1 声望0 粉丝

Solomon(肖爱良) ,花名:肖哥弹架构