责任链与事件

Chain of Responsibility vs Events

我总是犹豫什么时候选择这两种模式中的一种。例如: 假设我有一个输入管理器,当我按下一个按钮时,我希望主要玩家执行跳跃动作。在这种情况下,我可以使用 2 种不同的解决方案:

  1. 我有一个 inputManager 告诉 GameManager 什么只是 append 并且 gameManager 告诉 Player-manager 采取行动。所以这是 类似于:inputManager ---> 游戏管理器 ---> Player-manager 和 这是责任链模式。
  2. PlayerManager在inputManager上注册跳转事件到 接收输入并且 PlayerManager 自动执行它的 跳转套路。

所以我的问题是:为什么我会选择一种模式而不是另一种模式?两者各有利弊,遇到这种情况,你更喜欢哪种解决方案?

这里的关键是责任:

  1. GameManager负责指挥PlayerManager进行跳跃。这表明逻辑集中在 GameManager 中,从而实现复杂的编排:GameManager 似乎很可能会命令许多其他管理器,并且它可能通过执行一些逻辑来实现所有这些管理器考虑在内。

  2. PlayerManager 根据收到的事件自行做出决定。在这种方法中,逻辑是分散的:每个利益相关者将监听它感兴趣的事件并采取相应的行动。因此,每个人都要为自己的行为负责。 GameManager 没有参与其中,可能与 PlayerManager 一样重要:他们很可能不知道另一个存在并且没有隐含的层次结构,每个人都只是孤立地工作。