【问题标题】:Two objects knowing of each other两个相互认识的对象
【发布时间】:2013-12-15 12:20:43
【问题描述】:

我有以下问题:我正在设计一个游戏,总结一下,假设我有三个类:

  • 播放器
  • 发电厂
  • 单位

一些“用例”

  • 玩家必须知道他有多少单位和动力装置。如果已达到限制,则不应建造更多的单位/动力装置(即玩家必须拥有属于他的每个元素的引用)
  • 单位向玩家请求能量,玩家从 PowerPlants 获取能量并将其发送给单位
  • 玩家必须知道单位或动力装置何时被摧毁(即单位和动力装置必须能够通知玩家它们已被摧毁)

我能让这个工作的唯一方法是,玩家知道 PowerPlants 和 Units,而且每个 PowerPlant 和 Unit 都知道他的 Player/Owner,以便他们可以通过两种方式进行交流。

不知何故,我认为这是一种代码味道……当我遇到类似情况时,从长远来看,我总是遇到麻烦。

提前致谢。

【问题讨论】:

  • 为了最小化耦合,我会让 PowerPlant 持有对 Notifyable 的弱引用(因此 Player 是 Notifyable);然后,PowerPlant 可以自己通知玩家等。我认为单独的事件管理器不是严格要求的。

标签: oop language-agnostic


【解决方案1】:

我在多个场合都遇到过这个问题,你所说的不一定是反模式,但它确实增加了不必要的复杂性。

YMMV,但就我而言,我并不想在这些不同的类之间建立直接关系,而是一种在发生事情时相互通知的方法,所以我发现的更简洁的方法是拥有一个事件管理器(或任何其他类型的回调机制)将所有逻辑部分粘合在一起。事实证明,使用腰带上的那个工具,我可以摆脱所有那些大大简化层次结构的双重引用。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2015-04-06
    • 2014-08-04
    • 2013-07-09
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多