因此,作为一名电工和程序员,我认为我非常了解 FSM 设计模式。这是:

  • 我们有一组 Nodes ,
  • 每个Node都知道,当程序在这个节点时,要做什么,
  • 每个 Node contains references to another chosen nodes ,知道在什么条件下,他应该继续选择一个。
  • eventafter processing 一个节点上,Node proceeds 到下一个选择的节点

  • 我想,这对我来说很清楚。尽管最近,当我实现状态机时,有人告诉我,实际上它是经过了一些修改的责任链(不确定他是否正确),并且,我所做的/所做的是:
  • Nodes 集(不代表线性或树结构)
  • 节点有对象,知道在什么条件下它们应该跳转到哪个节点
  • 每个节点都有自己的 处理上下文 (上下文的某些部分在节点之间共享)。

  • 不幸的是,我担心由于法律问题,我不允许在此处粘贴类图。

    另一方面,我们有责任链,我会(据我所知)以以下方式定义,即:
  • 我们有一些 ItemToProcess 接口(interface),
  • 我们有一些 Node 接口(interface),
  • 节点有对 的引用,只有一个 下一个节点,
  • 每个 Node 处理 ItemToProcess 并将处理过的一个转发给 nextNode

  • 所以据我了解:
  • 我们使用 Chain Of Responsibility ,我们希望 每个 节点
  • 处理(或至少尝试处理)一个 项目
  • 责任链表示 进程的顺序和恒定 执行
  • 我们使用 StateMachine 来表示图
  • 我们使用 StateMachine 来执行计算, 的计算顺序或种类可能会因某些事件而异

  • 我想请你确认我对这些设计模式的理解,或者告诉我我理解上的错误。

    最佳答案

    你的理解是正确的。

    我想补充一点,FSM 中的节点是不同的状态。当您切换到其他节点时, 会更改状态 。您可以连续多次调用同一个状态/节点。

    责任链没有不同的状态。正如您所说,链中的每个节点都尝试处理一个对象,如果一个节点成功处理了该对象,那么通常链会停止。

    责任链的常见用途是查找用于确定用于给定输入(例如文件类型或扩展名)的 Handler 或在类路径或资源定位器中查找项目的查找。您可以将这些类型的操作视为:

    [Node 1]
    
    "-Do you know what this is?"
    -No
    [Node 2]
    "-Do you know what this is?"
    -No
    [Node 3]
    "-Do you know what this is?"
    -Yes!
    

    完毕

    关于design-patterns - 责任链与有限状态机 - 差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33531587/

    10-12 16:09