您的位置:首页 > 其它

状态模式(State)

2016-01-09 14:45 253 查看
一、状态模式介绍

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。

把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

当遇到不同的状态遇到不同的行为的时候,可以使用状态模式

状态模式UML图



State(抽象状态类):定义一个接口以封装与Context的一个特定状态相关的行为。

ConcreteStateA,B,C(具体状态):每一个子类实现一个不同的状态或行为

Context(上下文):维护一个State子类状态的实例,这个实例中定义了当前的状态。

二、状态模式代码实现

首先按照UML图中,定义一个State接口,使用抽象类也行

然后定义几个具体的状态

开始定义重要的部分,Context上下文。这个对象中定义了当前状态

测试代码:

结果:

修改状态:房间空闲中,可以预定!

修改状态:房间已被预定!

修改状态:房间已入住!

在上面的例子中,如果不用状态模式,想要改变房间状态的话。则需要大量条件分支判断

三、总结

开发中场景:

银行系统中账号状态的管理

OA系统中公文状态的管理

酒店系统中,房间状态的管理

线程对象各状态之间的切换

状态模式的好处:

1、可以将不同状态的不同行为分割开来,将相关的行为进行局部化。以便更改局部状态

2、消除了庞大的条件分支语句。

什么时候使用状态模式呢?

当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。

Java23种设计模式学习笔记【目录总贴】

参考资料:

  大话设计模式(带目录完整版).pdf

  HEAD_FIRST设计模式(中文版).pdf

  尚学堂_高淇_java300集最全视频教程_【GOF23设计模式】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: