问题标签 [chain-of-responsibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1669 浏览

java - 带有线程池的责任链

我有一个由 3 个阶段组成的责任链。

阶段

我的阶段实现如下所示。

流程管理器

界面

最后是 RecordProcessor,

现在我观察到我的中间阶段需要一些时间才能完成。所以现在我对使用线程池很感兴趣,所以记录的处理方式如下所示。

在这里,我假设了 3 个工作线程。

推荐链

问题

如何正确修改现有的 CoR 以满足新要求?

0 投票
4 回答
1990 浏览

c# - 责任链动态链

我正在开发一个使用责任链来处理请求的应用程序。我知道如何构建链,但是如果您查看下面的示例,我将不得不调用link1.Process(request);以启动链过程。我想弄清楚的是,有没有办法把它当作一个集合来处理,可以只调用链的第一个链接,不管它是什么?原因是,我知道基本元素是什么(最终的默认对象),但是其他程序员可以将对象添加到链中,并可能将它们放在链永远无法到达它们的位置。

无法访问的链接示例:

如果他们没有修改启动进程的代码link4.Process(request),那么 link4 将永远不会成为链的一部分。

简而言之,是否可以动态构建链,以便如果有人将对象添加到集合中,它会自动添加到链中?

0 投票
1 回答
914 浏览

chain-of-responsibility - 责任链的常见用法?

我看到一个教程视频解释了责任链设计模式,我想我理解它是如何工作的,但我不确定我什么时候会真正使用它。责任链的一些常见用法是什么?

0 投票
1 回答
485 浏览

javascript - 命名空间和继承:具有 JavaScript 责任链的超级构造函数

我正在使用 JavaScript 处理命名空间、类、继承和模式责任链,但它不起作用 - 我尝试按照本教程进行操作,但是当我尝试实现命名空间和超级构造函数时,它不起作用工作,所以我想我错过了一些东西。

我将类放在不同的文件中,并且使用相同的命名空间。我有一堂课Constraint.js

接下来是具有继承的类,它在另一个文件中StringConstraint.js

和班级BuilderConstraint.js

最后是文件app.js,这是我的主要内容:

我希望不要很尴尬,但我很困惑。

所以,我的问题是:

  1. 如何在不同的 JavaScript 文件中正确使用命名空间?
  2. 如何在不覆盖命名空间的情况下添加类?
  3. 如何使用命名空间编写类的构造函数?
  4. 如何在子类的构造函数中使用父类的构造函数?
  5. 将继承类与命名空间一起使用的正确方法是什么?
  6. 如何在子类中正确使用父母属性?

这是一个类约束(父类):

班级StringConstraint(儿童班):

这是一个类BuilderConstraint

这是app.js

你可以在这里看到代码:https ://gist.github.com/cristianchaparroa/f4ace75aeb8cff04181a

0 投票
0 回答
407 浏览

java - 比较责任链下降的枚举

我对我正在做的一个项目有疑问。

场景是有一艘宇宙飞船,上面有 4 名船员,每个船员可以处理船上某种类型的故障,这 4 名船员是:

Space Monkey - 他可以处理 TRIVIAL 故障 Service Robot - 他可以处理 LOW 故障 Engineer - 他可以处理 MEDIUM 故障 Captain - 他可以处理 HIGH/ALL 故障

现在我已经实现了命令链设计模式,如果创建了 4 个对象中的一个并出现故障,它将查看他们是否可以处理它,如果不能,他们会将其传递给下一个工作人员.

但这很好,但现在我这样做是为了让船长可以处理他可以处理的低优先级故障。

我有一个名为 processMalfunction 的方法,它接受一个 Malfunction 类型的对象(一个 Malfucntion 对象接受一个表示严重性的枚举和一个给出故障描述的字符串)

然后将故障与接到故障的机组成员进行比较,在这种情况下,如果是船长处理低优先级故障,他将能够处理它。

我可以执行 if 语句来比较当前故障枚举是否与机组成员的能力级别枚举匹配,但我需要某种方式将其与低于他能力的其他级别进行比较,以防他被授予较低级别任务。

这是 processMalfunction(Malfunction m) 方法的代码片段

这是故障类的副本

}

谁能建议我将机组成员的枚举类型与从机组成员能力传递到最低的故障枚举进行比较的最佳方法

即,如果工程师通过了低级故障 id 需要检查枚举 MEDIUM、LOW 和 TRIVIAL 以确保他可以像 if 语句中那样处理故障,如果他可以处理它,他会的。所以我需要它基本上说

如果故障级别等于或小于机组成员的枚举能力级别,则处理故障,如果不是,则将其传递。

任何帮助将不胜感激。

亲切的问候

Ĵ

0 投票
1 回答
129 浏览

java - 使用 DI 创建可插入的 StrategyFactory

我有一个为文本文件处理创建策略的引擎。这些文件有各种格式,引擎通过一系列策略传递文件来选择适当的策略,直到其中一个断言它可以解析它。

这不是典型的策略模式。它有点类似于服务定位器模式和责任链模式,并且可以合并其中任何一个方面的方面。

剥离后看起来有点像这样,尽管它目前是通过注入创建的:

就目前而言,问题在于 EngineImpl 必须在编译时知道所有可用策略才能使其工作,我希望能够在不更改 EngineImpl 代码的情况下部署新策略。我在其他地方寻找在 Java 中执行此操作的选项并提出了空白。我考虑过让 Strat 类向引擎注册自己,但它们永远不会被类加载器加载,因此永远不会有机会注册。

我可以使用哪些替代方法来注册策略?虽然我目前正在使用 DI,但我对其他基于反射和/或注释的解决方案持开放态度。

0 投票
3 回答
1646 浏览

java - 责任链:循环还是下一个?

我正在实施责任链模式。

我有不同的策略可以组合在一个列表中,我有一个处理器来处理策略列表。每个策略都可以处理 CustomInput,并且可以选择是否也应处理其余策略。

我打算实现处理器循环遍历策略列表并检查每个策略的布尔结果以了解是否继续执行其余策略。

我的同事建议将下一个策略传递给每个策略,并让他们调用(或不调用)下一个策略(例如 FilterChain 所做的)。

我的问题如下:

在第二个解决方案(将下一个策略传递给当前正在处理的策略)中,我在循环每个策略并检查其结果方面看不到任何好处吗?

0 投票
1 回答
242 浏览

java - 重构和删除链过滤中的 if null 检查

我正在对数据库条目进行一些过滤,最终得到了一些我不喜欢的丑陋代码。

我有我的MyFilterResolverFactory班级,在那里我建立和归还我的MyFilterResolver链条。

还有一个丑陋的具体实现:

MyFilterclass 是一个普通的 POJO,只有 getter/setter。

我想摆脱这些if (something != null)检查,但我不知道如何。

0 投票
2 回答
171 浏览

java - 责任链:余数算法?

在以下方法中,我尝试执行以下操作:

如果您至少有 20 英镑:

  • 计算出 20 英镑纸币的数量

  • 计算出剩下的(剩余部分)——将其传递给下一个处理程序

  • 如果您的资产少于 20 英镑,请致电下一个处理程序

注意:该程序适用于 ATM 分配器,它根据用户需要的(数量)分配纸币(20、10、5)。

到目前为止,以下是我的解决方案,我需要帮助来纠正算法

0 投票
2 回答
10482 浏览

java - 对于大型验证任务,责任链模式是一个不错的选择吗?

我需要建立一个流程来根据约 200 条验证规则验证记录。记录可以是约 10 种类型之一。从验证规则到记录类型有一些分段,但存在很多重叠,这使我无法干净地对验证规则进行分类。

在我的设计过程中,我正在考虑所有验证规则的责任链模式。这是一个好主意还是有更好的设计模式?