状态模式(State Pattern):电商平台订单状态管理实战

2024-07-26  本文已影响0人  肖哥弹架构
image.png

在电商平台中,订单的生命周期会经历多个状态,如下单、支付、发货、收货和完成。每个状态都有对应的操作,且状态之间可以转换。

2. 为什么要使用状态设计模式

状态模式允许一个对象在其内部状态改变时改变其行为,看起来好像修改了其类。这使得管理复杂的状态转换变得更加简单和灵活。

3. 标准状态设计模式图

image.png

4. 业务状态设计模式图

image.png

5. 业务代码参考

    // 订单状态接口
    interface OrderState {
        OrderState next();
        void execute();
    }

    // 下单状态
    class PlacedOrderState implements OrderState {
        private OrderContext context;

        public PlacedOrderState(OrderContext context) {
            this.context = context;
        }

        @Override
        public OrderState next() {
            // 支付后状态变为已支付
            return new PaidOrderState(context);
        }

        @Override
        public void execute() {
            System.out.println("订单已创建,等待用户支付。");
        }
    }

    // 已支付状态
    class PaidOrderState implements OrderState {
        private OrderContext context;

        public PaidOrderState(OrderContext context) {
            this.context = context;
        }

        @Override
        public OrderState next() {
            // 发货后状态变为已发货
            return new ShippedOrderState(context);
        }

        @Override
        public void execute() {
            System.out.println("订单支付成功,准备发货。");
        }
    }

    // 已发货状态
    class ShippedOrderState implements OrderState {
        // ... 类似实现
    }

    // 已收货状态
    class DeliveredOrderState implements OrderState {
        // ... 类似实现
    }

    // 已完成状态
    class CompletedOrderState implements OrderState {
        private OrderContext context;

        public CompletedOrderState(OrderContext context) {
            this.context = context;
        }

        @Override
        public OrderState next() {
            // 订单完成,无后续状态
            return null;
        }

        @Override
        public void execute() {
            System.out.println("订单已完成。");
        }
    }

    // 订单上下文
    class OrderContext {
        private OrderState state;

        public void setState(OrderState state) {
            this.state = state;
        }

        public void processOrder() {
            state.execute();
            // 状态转换逻辑
            setState(state.next());
        }
    }

    // 客户端使用
    class ECommerceOrderSystem {
        public static void main(String[] args) {
            OrderContext order = new OrderContext();
            order.setState(new PlacedOrderState(order));
            order.processOrder(); // 执行订单流程
        }
    }

6. 使用状态设计模式的好处

7. 其他使用状态设计模式场景参考

8. 可参考开源框架

总结

状态模式通过将状态相关的行为封装在状态对象中,简化了状态转换的复杂性,提高了代码的可维护性和扩展性。

历史热点文章

上一篇 下一篇

猜你喜欢

热点阅读