一、状态模式介绍

状态模式(State Pattern)属于行为型模式。
定义:类的行为基于状态的改变而改变。

比如订单状态,当状态为待发货,此时订单只有发货和退货的行为操作,订单状态为已发货,此时订单只有退货相关行为操作,订单状态为待付款,此时订单只有付款和取消的行为方式。

二、状态模板

场景:不同状态下的订单仅支持特定的操作,订单状态变更,其允许的操作跟着变更。

2.1、订单支持的操作,接口定义

[设计模式]-[行为型]-状态-介绍及应用 - 图1
如图,模拟订单允许的几种操作:支付,发货,收货,取消订单。

2.2、根据不同状态定义订单操作

订单状态操作类实现接口 OrderOperateState

未支付状态下的订单操作类 UnpaidState
[设计模式]-[行为型]-状态-介绍及应用 - 图2
忽略更多状态具体实现….

2.3、订单状态枚举类

通过枚举类的方式实现策略模式,根据状态获取相关订单操作实例。
相关代码如下:
[设计模式]-[行为型]-状态-介绍及应用 - 图3

2.4、订单数据类

用以表示订单数据,以及订单操作的类 OrderOperate,相关代码如下:
[设计模式]-[行为型]-状态-介绍及应用 - 图4
OrderOperate 实现了 OrderOperateState 接口,实现了订单操作的相关方法,
不过操作的具体实现以持有的订单数据 OrderDomain 中的订单状态为主。

2.5、测试代码

[设计模式]-[行为型]-状态-介绍及应用 - 图5
通过查询数据库获取到的订单数据,构建处理类,处理类,根据订单数据中的订单状态,构建相关状态下的订单操作对象。


【公众号】花好夜猿
wxlogo.jpg