UML实现状态图

UML实现状态图,状态图的实现主要有3种方式:嵌套switch状态模式状态表。处理状态图最直接的方法是嵌套switch语句,如图6所示。虽然直接,但即使在简单的情况下,也会得到长长的烦琐的代码。这个方法也非常容易失去控制,因此即使是简单的情况我也不喜欢使用它。

状态模式state pattern)创建状态类层次来处理状态的行为。图中的每个状态都有一个状态子类。控制器有针对每一个事件的方法,它简单地转发给状态类。实现状态机图的类如图7所示。

图6:处理状态机图状态转换的C#嵌套switch
UML实现状态图

图7:状态机图的状态模式实现
UML实现状态图

层次的顶层是一个抽象类,它将所有事件处理方法实现为什么都不做。对每一个具体状态,简单地覆盖状态有转换的特定事件方法。

状态表state table)方法捕获状态图信息为数据。因此状态机图可以表达成像表1那样的一个表。然后,我们建造运行时使用该状态表的一个解释器或者一个基于该状态表生成类的代码生成器。

表1:状态机图的状态表
UML实现状态图

显然,状态表一次要做比较多的工作,但是之后每一次有状态问题时都可以使用。运行时状态表也可以在无须重新编译的情况下修改,这在某些情况下是很方便的。当你需要时,状态模式更容易组织,虽然对于每一个状态它需要一个新的类,但每一种情况只要写少量代码即可。

上面这些实现相当小型化,但它们应该为你如何实现状态图提供了一些思路。在每一种情况下实现状态模型都会得到非常公式化的代码,因此,通常最好使用某些形式的代码来完成。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!