一句话总结
在其位 谋其政
个人感觉这个总结不是太好 但是脑子第一反应就是这句话 就用他来解释吧
- 在其位
在其位说明是坐在这个位置上 (达到某个状态) 说明类里面有个对象是记录状态的(还是个抽象类)
位置不止一个状态也不止一个 (抽象类的子类不止一个)
当状态增加的时候 对应的实现类也增加
- 谋其政
只有我拥有某个权力后才会干相应的事 (类的行为是基于它的状态改变的)
达到某个状态才调用对应的方法 (方法可能不止一个)
这样理解可以很简单的分析出状态模式的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(