一、状态模式介绍
状态模式(State Pattern)属于行为型模式。
定义:类的行为基于状态的改变而改变。
比如订单状态,当状态为待发货,此时订单只有发货和退货的行为操作,订单状态为已发货,此时订单只有退货相关行为操作,订单状态为待付款,此时订单只有付款和取消的行为方式。
二、状态模板
场景:不同状态下的订单仅支持特定的操作,订单状态变更,其允许的操作跟着变更。
2.1、订单支持的操作,接口定义
2.2、根据不同状态定义订单操作
订单状态操作类实现接口
OrderOperateState
未支付状态下的订单操作类 UnpaidState![[设计模式]-[行为型]-状态-介绍及应用 - 图2](/uploads/projects/it-learn@java-base/c40d2f2fbc70de4dd7cf68de38986567.webp)
忽略更多状态具体实现….
2.3、订单状态枚举类
通过枚举类的方式实现策略模式,根据状态获取相关订单操作实例。
相关代码如下:
2.4、订单数据类
用以表示订单数据,以及订单操作的类 OrderOperate,相关代码如下:![[设计模式]-[行为型]-状态-介绍及应用 - 图4](/uploads/projects/it-learn@java-base/703b20f0a15678e2db9458b1602ce56f.webp)
OrderOperate 实现了 OrderOperateState 接口,实现了订单操作的相关方法,
不过操作的具体实现以持有的订单数据 OrderDomain 中的订单状态为主。
2.5、测试代码
![[设计模式]-[行为型]-状态-介绍及应用 - 图5](/uploads/projects/it-learn@java-base/d681a08d46a246c2e585079c33850382.webp)
通过查询数据库获取到的订单数据,构建处理类,处理类,根据订单数据中的订单状态,构建相关状态下的订单操作对象。
【公众号】花好夜猿
![[设计模式]-[行为型]-状态-介绍及应用 - 图1](/uploads/projects/it-learn@java-base/5acbb51096cca71aef7765f9ba0c971a.webp)
