我在普通状态机中使用状态模式。我希望能够从[ A - > B ],[ B - > C ]和[ A - > ç]。 现在我们的域名有一个新规则,现在我需要从[C - > A] 也是,但只有如果我之前从未进入过B 。 所以我们有状态的内存。有两种可能的解决方案:
这两种中哪一种更适合使用状态模式的内存? (或其他替代方案2)
由于
答案 0 :(得分:3)
转到第二个解决方案。它更容易理解,也更容易扩展。
不要因为它的名字听起来与你喜欢的名字相似而不再遵守设计模式。
答案 1 :(得分:2)
如果它有内存,那么它不是真正的状态机。如果你想保持这种身份,选项1是正确的。
答案 2 :(得分:1)
存在具有内存的状态机,它们被称为下推自动机...... 我们的想法是拥有一个堆栈,您可以将其读入状态并写入退出状态。 关于状态设计模式,我想它可以在上下文中实现为Memento。
答案 3 :(得分:0)
选项#2有效。你的历史名单有多大?如果通过列表搜索成为一个漫长的过程,那么我将使用选项#3:在您的上下文中添加一个布尔标志,称为visitedStateB。在初始化时将此标志设置为false。当转换将您带入状态B时,将标志设置为true。
答案 4 :(得分:0)
实施状态模式以及Memento pattern?
的变体