![]() |
1
2
这绝对是一个合理的做法,如果您的状态成倍增加(就像状态机倾向于这样),这可能会变得有点难以维护,但实际上这是一个非常好的OO风格的状态机实现。
对于扩展,您可能还想“命名”您的状态并将它们放入哈希表中,一旦它扩展(记住,在编程中您有1个或多个)添加新的状态不会对您的状态机进行代码更改--但我假设您已经有了类似的东西,并且只是针对这个问题缩小了它。 还要注意,要切换不希望直接执行的状态(如示例所示),可能需要一个方法(setState)在perform方法返回时更改状态,而不是在perform方法本身中或在其运行时更改状态。实际上,您可以让perform返回一个字符串,指示它的下一个所需状态。。 根据评论编辑: 我给你们的州命名的意思是:
你可能会有这样的想法(请原谅我的java语法,C不是我的主要语言,但我知道它在功能上非常相似)
您的呼叫代码将执行以下操作:
我忽略了很多初始化和错误检查。 您的状态机当前只有一个事件:“Perform()”。您可能会发现您需要其他事件,这些事件会使事情稍微复杂一些(在java中,我可能会使用反射或注释来解决这个问题,不确定C#将如何做到这一点)。 |
|
simply lemon · python上链表的添加方法 11 月前 |
![]() |
HiroIshida · C++多重继承:实现具有重叠虚函数的接口[重复] 12 月前 |
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
![]() |
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
![]() |
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
![]() |
Andy Votava · 从父类定义调用学生方法 1 年前 |