概念
状态模式是将对象的状态接口抽出,从状态的维度出发描述对象。对象千千万,状态
就那么几个,所以从状态的维度度量。业务上会清晰很多。
实现
类图
代码
抽象状态 CarState
1
2
3
4
5
6
7
8
9
10
11
12
13package com.littlehui.design.state;
/**
* @Description TODO
* @ClassName CarState
* @Author littlehui
* @Date 2020/4/7 17:09
* @Version 1.0
**/
public interface CarState {
public void doCarAction(Car car);
}具体状态 start,run,stop
1 | package com.littlehui.design.state; |
- 上下文 Car
1 | package com.littlehui.design.state; |
- 客户端调用
1 | package com.littlehui.design.state; |
- 执行结果
1 |
|
场景
总结
好处
状态控制放到了服务的内部,客户端不用操作具体的状态流转业务逻辑。可以分节点操作,扩展性能比较好。
上面这个例子只是很简单的模仿了一下工作流控制状态的跳转。状态模式最主要的好处就是把状态的判断与控制放到了其服务端的内部,使得客户端不需要去写很多代码判断,来控制自己的节点跳转,而且这样实现的话,我们可以把每个节点都分开来处理,当流程流转到某个节点的时候,可以去写自己的节点流转方法。坏处
状态类要同时实现。耦合度会高。