19、State 状态模式
“人有悲欢离合,月有阴晴圆缺”,包括人在内,很多事物都具有多种状态,而且在不同状态下会具有不同的行为,这些状态在特定条件下还将发生相互转换。就像水,它可以凝固成冰,也可以受热蒸发后变成水蒸汽,水可以流动,冰可以雕刻,蒸汽可以扩散。
1、State 状态模式
状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用,例如公文状态的转换、游戏中角色的升级等。
定义
当一个对象的内部状态改变时,允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件过于复杂的情况。吧状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的控制逻辑转换。当然,如果这个状态逻辑很简单,就没必要用状态模式了。
意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
2、示例代码
酒店客房房间状态变化
2.1、原始方案
if (state == "空闲") {
if (预定房间) {
预定操作;
state = "预定";
}else if(入住房间) {
入住操作;
state = "入住";
}
} else if(state == "预定") {
if (取