状态模式

来源:互联网 发布:arp ip 对应mac地址 编辑:程序博客网 时间:2024/06/11 00:16

使用场景:主要用来消除if else这种多条件,主体是可枚举的状态,在实际应用中,比如开关灯,电梯上下这种简单场景,也可以用于有多种操作,各个操作与状态有关系,比如酒店订房。在电商场景中,订单状态跃升可以使用这种模式,总体说来,有多个平行状态且各个状态能进行跃迁的都可以考虑用这种模式。
类图:状态模式类图

Context:上下文环境,维护着一个当前状态。
state:状态的抽象类,包含具体操作(可多个,与当前状态无关的空实现即可),其中方法参数为context
ConcreteSate:具体状态类,包含实际操作及状态跃迁。

原理:通过将状态拆分成一个一个的类,减少具体if else判断。各个具体状态中包含本身操作及设置context中的状态并实现状态流转。一些有关联性操作的状态也可以用状态模式实现。但这样基础state类中就需要定义所有的操作接口。

优点:减少了if else的判断,代码结构清晰
缺点:局限性较大,适合范围有限,仅适合一些结构简单的场景。