设计模式之状态模式

状态模式是一种行为设计模式,用于当对象的行为取决于其状态时。本文通过京东物流的例子,阐述了如何定义状态接口、物流Context类以及各种具体状态类,并讨论了状态模式的优势和适用场景,有助于减少代码中的条件语句并提高可扩展性。
摘要由CSDN通过智能技术生成

一句话总结

在其位 谋其政

个人感觉这个总结不是太好 但是脑子第一反应就是这句话 就用他来解释吧

- 在其位

在其位说明是坐在这个位置上 (达到某个状态) 说明类里面有个对象是记录状态的(还是个抽象类)
位置不止一个状态也不止一个 (抽象类的子类不止一个)
当状态增加的时候 对应的实现类也增加

  • 谋其政

只有我拥有某个权力后才会干相应的事 (类的行为是基于它的状态改变的)
达到某个状态才调用对应的方法 (方法可能不止一个)

这样理解可以很简单的分析出状态模式的3个角色

  • State :(规范我的行为)是一个接口,封装了状态及其行为

  • ConcreteState X:(不同状态的我) State的实现类,表示具体的状态(不同的状态重写不同的方法)

  • Context :(善变的我) 保持并切换各个状态,其持有一个State的引用。它将依赖状态的各种操作委托给不同的状态对象执行。其负责与客户端交互
    UML类图
    在这里插入图片描述

状态模式之京东物流

双十一女朋友送了个固态硬盘 自从下单以来,我看物流状态信息,心心念念着自己的固态硬盘快点到…

这个物流系统就很适合使用状态模式来开发,因为此过程存在很多不同的状态,例如接单,出库,运输,送货,收货,评价等等。而订单在每个不同的状态下的操作可能都不一样,例如在接单状态下,商家就需要通知仓库拣货,通知用户等等操作,其他状态类似

下面是实例的UML类图
在这里插入图片描述

第一,定义一个状态接口

此接口定义各个状态的统一操作接口

public interface LogisticsState {
   
    void doAction(JdLogistics context);
}

第二,定义一个物流Context类

此类持有一个LogisticsState 的引用,负责在流程中保持并切换状态

public class JdLogistics {
   
    private LogisticsState logisticsState;

    public void setLogisticsState(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一叶一菩提魁

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值