第16章 无尽加班何时休——状态模式
概念
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式其实就是将系统用不同状态表示,在不同状态进行不同行为。状态用对象实现具体行为、亦随着行为的进行状况,可对系统进行状态更新、切换等。
场景
状态模式应用场景是一个对象状态转换的条件过于复杂之时。它用于将复杂的判断逻辑简化,将状态判断的复杂逻辑转移到一系列类当中。
实现
- State 抽象状态类提供每个状态公共接口(
handle()
); - ConcreteStatexx, 各个具体状态,其接口 (
handle()
) 主要任务:1. 负责判断当前状态 2. 不符合当前状态进行下一个状态的切换。 - Context维护与切换状态,包含:当前状态ConcreteStateX及获取当前状态的接口;
request()
函数,请求处理与切换当前状态(调用状态handle)
如果没有状态,那么所有不同状态的事情都在某个条件分支中进行,函数会过于庞大复杂并且增加减少状态时需要修改整个函数也容易修改出错。
有了状态,每个分支的工作放到不同状态对象中,分支间的判断在每个状态切换中进行, 在增加修改状态时,只需修改相关部分,满足了更好的开放封闭原则。
类图如下:
img客户端代码:
img当一个对象的行为取决于它的状态,并且运行时必须时刻根据状态改变它的行为时,就可以考虑用状态模式了。
网友评论