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:一个开源的工作流引擎,使用状态模式来管理流程状态。
总结
状态模式通过将状态相关的行为封装在状态对象中,简化了状态转换的复杂性,提高了代码的可维护性和扩展性。
历史热点文章
- 外观模式(Facade Pattern):微服务架构中的数据库访问实战案例分析
- 代理模式(Proxy Pattern):权限校验API调用实战案例分析
- 桥接模式(Bridge Pattern):多样式用户界面组件实战案例分析
- 组合模式(Composite Pattern): 在线教育平台课程管理实战案例分析
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析