因此,作为一名电工和程序员,我认为我非常了解 FSM 设计模式。这是:
Nodes
, Node
知道,当程序在这个节点时,该做什么,Node
contains references to another chosen nodes
,并且知道在什么条件下,他应该前往所选择的那个。 event
或 after processing
一个节点,Node proceeds
到下一个选择的节点 我想,这对我来说很清楚。虽然最近,当我实现状态机时,一个人告诉我,这实际上是一个有点修改的责任链(不确定他是否正确)并且,我所做/曾经做过的是:
Nodes
(不代表线性或树结构)不幸的是,我担心由于法律问题,我不允许在此处粘贴类图。
另一方面,我们有责任链,我会(据我了解)以以下方式定义,即:
ItemToProcess
接口(interface),Node
接口(interface),ItemToProcess
并将已处理的一个转发到 nextNode
据我了解:
Chain Of Responsibility
, 我们想要 一个 处理(或至少尝试处理)的项目每个 节点 StateMachine
表示图形 StateMachine
执行计算,计算的顺序或种类可能会有所不同取决于一些事件。 我想请您确认我对这些设计模式的理解,或者告诉我我在哪里理解错误。
最佳答案
我将通过说设计模式还考虑使软件易于扩展来补充另一个答案。
责任链的优点是可以编写新的 ConcreteHandler
类来扩展您的处理功能,没有 Client
必须修改类。
但是,必须修改构建链的代码以将新处理程序添加为对象:
如果你想添加新的具体状态,状态就不那么灵活了。 GoF 书显示了此图:
不明显(在 this answer 中阅读更多内容)是 Handle()
事件耦合到另一个 ConcreteState
类(即下一个状态)。所以,编码一个新的ConcreteState
可能需要对现有的部分或全部 ConcreteState
进行更改类。
在状态模式中添加新状态可能不像在责任链模式中添加新处理程序那么容易。
关于design-patterns - 责任链与有限状态机 - 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531587/