1分钟设计模式State Pattern
Posted 码哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1分钟设计模式State Pattern相关的知识,希望对你有一定的参考价值。
状态模式属于行为型模式。该模式旨在通过改变对象内部状态改变其行为,以便在增删改状态代码时对象不受影响。
现实中的示例为应急响应机制,如防汛抗旱、公共卫生、突发灾害等应急响应机制,对应职能部门在不同的级别的应急响应状态下,所执行的方案也不同。
我们这里抽象比喻一下(可能存在描述错误,请指正),我们将整职能部门简单抽象为三个层级,乡镇、地方、国家,在不同级别的应急响应状态下,这三个层级的职能部门所做出的行为也不同,例如:四级响应可能只需乡镇、地方参与,而四级提升到二级响应则需要乡镇、地方、国家均参与,假设需要增加一个N级响应状态,只需再出台一个N级状态下各级职能部门职责的规定即可,而不需要修改其他响应状态的规定(如《国家防汛抗旱应急预案》)。也就是在不同的状态下,对于相同的类型的事件,对象所做的行为也不同,这个示例中应急响应级别就是状态,执行的方案就是对象的行为。
状态模式类图如下。
如上类图示例为电梯,如类图所示电梯(Lift)和状态(State)为组合关系,状态假定有四种:开、关、上升、下降,如果我们不使用状态模式,电梯的四个方法中将存在大量的判断,以open方法为例,轿厢内按下开电梯门按钮需要判断是否是关闭状态、电梯是否在上升或下降等,如果电梯增加一种新的状态停运,则需要修改电梯类。但是如果我们使用状态模式,就如上类图所示,电梯的方法不在电梯内部实现,而是在对应的状态中实现,并且状态的切换也可以对应的状态实现类中实现,这样如果电梯增加一种新的状态:停运,只需扩展一个状态的实现类OffState而不需修改电梯类。
状态模式主要用在对象存在多种状态,且多种状态下对象的行为需要表现的不同,这种情况下为了满足开闭原则,将不同的状态单独维护,而对象内部保存状态和状态转换的机制即可,当有需要编写新的状态的代码时,不需要修改原有对象,只需增加内部状态的实现类即可。另外状态模式的状态是会随着环境而变化的,也就是说使用状态模式的对象还需要存在状态的变化。
以上是关于1分钟设计模式State Pattern的主要内容,如果未能解决你的问题,请参考以下文章