责任链与事件
Chain of Responsibility vs Events
我总是犹豫什么时候选择这两种模式中的一种。例如:
假设我有一个输入管理器,当我按下一个按钮时,我希望主要玩家执行跳跃动作。在这种情况下,我可以使用 2 种不同的解决方案:
- 我有一个 inputManager 告诉 GameManager 什么只是
append 并且 gameManager 告诉 Player-manager 采取行动。所以这是
类似于:inputManager ---> 游戏管理器 ---> Player-manager 和
这是责任链模式。
- PlayerManager在inputManager上注册跳转事件到
接收输入并且 PlayerManager 自动执行它的
跳转套路。
所以我的问题是:为什么我会选择一种模式而不是另一种模式?两者各有利弊,遇到这种情况,你更喜欢哪种解决方案?
这里的关键是责任:
GameManager
负责指挥PlayerManager
进行跳跃。这表明逻辑集中在 GameManager
中,从而实现复杂的编排:GameManager
似乎很可能会命令许多其他管理器,并且它可能通过执行一些逻辑来实现所有这些管理器考虑在内。
PlayerManager
根据收到的事件自行做出决定。在这种方法中,逻辑是分散的:每个利益相关者将监听它感兴趣的事件并采取相应的行动。因此,每个人都要为自己的行为负责。 GameManager
没有参与其中,可能与 PlayerManager
一样重要:他们很可能不知道另一个存在并且没有隐含的层次结构,每个人都只是孤立地工作。
我总是犹豫什么时候选择这两种模式中的一种。例如: 假设我有一个输入管理器,当我按下一个按钮时,我希望主要玩家执行跳跃动作。在这种情况下,我可以使用 2 种不同的解决方案:
- 我有一个 inputManager 告诉 GameManager 什么只是 append 并且 gameManager 告诉 Player-manager 采取行动。所以这是 类似于:inputManager ---> 游戏管理器 ---> Player-manager 和 这是责任链模式。
- PlayerManager在inputManager上注册跳转事件到 接收输入并且 PlayerManager 自动执行它的 跳转套路。
所以我的问题是:为什么我会选择一种模式而不是另一种模式?两者各有利弊,遇到这种情况,你更喜欢哪种解决方案?
这里的关键是责任:
GameManager
负责指挥PlayerManager
进行跳跃。这表明逻辑集中在GameManager
中,从而实现复杂的编排:GameManager
似乎很可能会命令许多其他管理器,并且它可能通过执行一些逻辑来实现所有这些管理器考虑在内。PlayerManager
根据收到的事件自行做出决定。在这种方法中,逻辑是分散的:每个利益相关者将监听它感兴趣的事件并采取相应的行动。因此,每个人都要为自己的行为负责。GameManager
没有参与其中,可能与PlayerManager
一样重要:他们很可能不知道另一个存在并且没有隐含的层次结构,每个人都只是孤立地工作。