当前位置: 首页 > 知识库问答 >
问题:

责任链与有限状态机-差异

邓鸿彩
2023-03-14

所以,由于我是一个电工和程序员,我认为我对FSM设计模式非常了解。它是:

  • 我们有一组节点,
  • 每个节点都知道,当程序位于此节点时,要做什么,
  • 每个节点包含对另一个选定节点的引用,并且知道在什么条件下,他应该继续到选定的节点。
  • 事件处理节点后,节点继续到下一个选择的节点

我想,这对我来说很清楚。尽管最近,当我在实现一个状态机时,一个人告诉我,它实际上是一个稍微修改过的责任链(不确定他是否正确),并且,我所做的/所拥有的是:

  • 一组节点(不表示线性或树状结构)
  • 节点具有对象,这些对象知道在何种条件下它们应该跳转到哪个节点
  • 每个节点都有自己的处理上下文(上下文的某些部分在节点之间共享)。

不幸的是,由于法律问题,我不允许在这里粘贴类图。

另一方面,我们有责任链,我(按照我的理解)将其定义如下:

  • 我们有一些ItemToProcess接口,
  • 我们有一些节点接口,
  • 节点只引用了一个下一个节点,
  • 每个节点处理ItemToProcess并将已处理的一个转发给NextNode

所以据我所知:

  • 我们使用责任链,其中我们希望每个节点处理(或至少尝试处理)一个项目
  • 责任链表示流程的顺序和持续执行
  • 我们使用stateMachine表示图
  • 我们使用stateMachine执行计算,计算的顺序或种类可能会根据某些事件而有所不同。

我想请您确认一下我对那些设计模式的理解,或者告诉我在理解上哪里犯了错误。

共有1个答案

长孙阳成
2023-03-14

你的理解是正确的。

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

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

责任链的常见用法是查找给定输入(如文件类型或扩展名)使用什么处理程序,或者在类路径或资源定位器中查找项。您可以将这些类型的操作视为:

[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!

已完成

 类似资料:
  • 概述 Javascript Finite State Machine函数库 参考链接 概述 有限状态机(Finite-state machine)是一个非常有用的模型,可以模拟世界上大部分事物。 简单说,它有三个特征: 状态总数(state)是有限的。 任一时刻,只处在一种状态之中。 某种条件下,会从一种状态转变(transition)到另一种状态。 它对JavaScript的意义在于,很多对象可

  • 概述 FSM (有限状态机) 可以mixin到akka Actor中,其概念在Erlang 设计原则中有最好的描述。 一个 FSM 可以描述成一组具有如下形式的关系 : State(S) x Event(E) -> Actions (A), State(S') 这些关系的意思可以这样理解: 如果我们当前处于状态S,发生了E事件,则我们应执行操作A,然后将状态转换为S’。 一个简单的例子 为了演示F

  • 我需要设计一个有效的决策过程来确定非确定性有限状态机接受的语言是否为空。 我知道,若从初始状态到最终状态并没有路径,机器就不会接受字符串。 但我正在努力证明这一点或设计程序。 谢谢

  • 主要内容:介绍,实现,AbstractLogger.java,ConsoleLogger.java,ErrorLogger.java,FileLogger.java,ChainPatternDemo.java顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求

  • 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 介绍 意图:避免请求发送者与接收者耦合在一起,让多个对象

  • 简介 责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。 以下的日志类(logging)例子演示了该模式。 每一个logging handler首先决定是否需要在该层做处理,然后将控制传递到下一个log