美文网首页
状态模式(State Pattern):电商平台订单状态管理实战

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

作者: 肖哥弹架构 | 来源:发表于2024-07-26 14:24 被阅读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. 可参考开源框架

  • Activiti:一个开源的工作流引擎,使用状态模式来管理流程状态。

总结

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

历史热点文章

相关文章

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • C++设计模式(3)

    本文预览: 状态模式 组合模式 迭代器 职责链 命令 状态模式 定义:状态模式(State Pattern),允许...

  • 状态模式(State Pattern)

    一个对象的状态之间可以进行相互转换,通常有一下两种实现状态转换的方式: 统一由环境类(Context)来负责状态之...

  • 状态模式(State Pattern)

    选自菜鸟教程 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为...

  • 状态模式(State Pattern)

    状态模式:允许对象在内部状态改变时改变他们的行为,对象看起来就像修改他们的类。 状态模式是行为型模式之一。状态模式...

  • 状态模式(State Pattern)

    状态模式 意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式主要解决的是当控...

  • State Pattern模式(状态模式)

    状态模式(State Pattern):用类来表示状态。这种类型的设计模式属于行为型模式。 介绍 意图:用类来表示...

  • Android设计模式——状态模式(十一大行为型)

    1.状态模式介绍 状态模式(State Pattern),是十一大行为型设计模式之一。 状态模式中...

  • java-NIO之API(3)- GoF之状态模式

    GoF-状态模式(State pattern) 状态模式定义 所谓的状态模式,指的是对于同一个对象而言,不同的状态...

  • 设计模式[20]-状态模式-State Pattern

    1.状态模式简介 状态模式(State Pattern)模式是行为型(Behavioral)设计模式,允许一个对象...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/okachjtx.html