gpt4 book ai didi

design-patterns - 状态模式是否准确地代表了方法?

转载 作者:行者123 更新时间:2023-12-04 06:53:39 24 4
gpt4 key购买 nike

我从 State pattern 的典型实现中收集到的信息s 是这样的:

问题:代表一个对象 Ø ,其行为会根据其当前状态而改变。
解决方案:
1.让小号 , 此对象内的另一个对象 Ø , 代表状态
2.对象小号 将调用 的适当操作Ø
3.对象小号 将决定对象的下一个状态 Ø

我关心的主要是 #3 .状态转换表基本上分布在所有状态中。我已经看到这些解决方案变得难以快速管理。这些状态不是指示器,而是关于状态机的太多信息。
即使 #2困扰我,我想这是相当合理的( Moore machine 。)我看到的唯一问题出现在错误修复/调试期间:代码导航/理解变得困难,直到将所有状态映射提交到内存。

下面的实现会更精确吗?
将状态表示为枚举,对象根据枚举持有的值决定 Action 。 state transitions在一个表(δ,状态转换函数)中,它是当前状态到下一个状态的映射。此 state transition table还持有要执行的操作( Mealy machine )

最佳答案

我不知道你为什么认为状态模式只能代表摩尔机。

void SleepingState::alarm()
{
kick_alarm_clock();
set_state(new GrumpyState());
}

我们根据状态 (SleepingState) 和事件 (alarm) 选择了我们的输出 (kick_alarm_clock),这使其成为 Mealy 机器。

您的替代方案确实有效且受欢迎(还有其他选择)。由于几种方法都足以实现机器逻辑,因此您可以根据“设计”或个人品味的其他考虑因素做出决定。喜欢 State 模式的设计原因可能是你认为你会经常添加新状态,或者如果某些状态看起来足够相似以保证继承关系。我倾向于选择美学:仅当机器相当密集时我才使用状态模式 - 即大多数 { state, event } 对都有重要的 Action 和转换。如果机器相当稀疏,我会对所有空方法感到尴尬。

关于design-patterns - 状态模式是否准确地代表了方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5222586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com