【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
一、状态模式基本介绍
- 状态模式:它主要用在对象在多个状态转换时,需要对外输出不同的行为的问题。状态和行为之间时一一对应的,可以互相转换;
- 当一个对象的内在状态改变时,允许改变其行为,这个对象看上去是改变其类。
二、状态模式各组成部分
- Context类:环境角色,用于维护当前实例,定义实例的当前状态;
- State类:抽象环境角色,定义一个接口,封装与Context的一个特点接口相关行为;
- ConcreateState类:具体的状态角色,每一个子类实现与Context一个状态相关行为。
三、金融借贷源码分析
订单状态容易反复变化:
- 竖的一列属性是订单生命周期的状态和状态码
- 横的一列是对订单的每一个操作(方法)
- 中间的状态是该状态的订单在进行该操作后,订单状态的变化
分析过后采用状态模式
- State:抽象接口,将所有订单操作(方法)放到这个接口中;
- AbstrateState:State接口方法的模式实现;
- *State:具体订单状态,重写该状态下的有关操作;
- StateEnum:订单相关状态枚举;
- Context:状态模式中的Context,在其中聚合成员变量State,利用构造方法初始化,State随着状态改变更换不同实例。
四、状态模式的注意事项和细节
- 代码很强的可读性,状态模式将每各状态的行为封装到对应的类中;
- 方便维护。将容易产生问题的if-else语句删除了,如果每个状态行为都放到一个类中,每次调用方法,都需要判断当前什么状态,不但会产生很多的if-else语句,而且容易出错;
- 符合ocp原则。容易增删状态;
- 会产生很多类,每个状态都要一个对应的类,当状态过多时,会产生很多类,加大维护难度;
- 应用场景:当一个事件或者对象有很多状态,状态之间会互相切换,对不同状态对应着有不同行为的时候,可以考虑状态模式。
来源:oschina
链接:https://my.oschina.net/edisonOnCall/blog/3152852