Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 两个物体互相认识_Oop_Language Agnostic - Fatal编程技术网

Oop 两个物体互相认识

Oop 两个物体互相认识,oop,language-agnostic,Oop,Language Agnostic,我有以下问题:我正在设计一个游戏,总结一下,假设我有三门课: 玩家 动力装置 单位 一些“用例” 玩家必须知道他有多少单位和动力装置。如果已达到限制,则不应建造更多的装置/动力装置(即,玩家必须拥有属于他的每个元素的参考) 单位向玩家请求能量,玩家从发电厂获取能量并将其发送给单位 玩家必须知道一个单位或动力装置何时被摧毁(即,单位和动力装置必须能够通知玩家它们已经被摧毁) 我唯一能让它工作的方法是,玩家知道动力装置和单位,但每个动力装置和单位都知道他的玩家/所有者,所以他们可以用两种方式

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

  • 玩家
  • 动力装置
  • 单位
一些“用例”

  • 玩家必须知道他有多少单位和动力装置。如果已达到限制,则不应建造更多的装置/动力装置(即,玩家必须拥有属于他的每个元素的参考)
  • 单位向玩家请求能量,玩家从发电厂获取能量并将其发送给单位
  • 玩家必须知道一个单位或动力装置何时被摧毁(即,单位和动力装置必须能够通知玩家它们已经被摧毁)
我唯一能让它工作的方法是,玩家知道动力装置和单位,但每个动力装置和单位都知道他的玩家/所有者,所以他们可以用两种方式进行交流

我觉得这是一种代码味道。。。当我处于类似的情况下,我总是有长期的麻烦


提前谢谢。

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


YMMV,但在我的例子中,我真的不想在这些不同的类之间建立直接的关系,而是想在发生事情时通知彼此,所以我找到的更干净的方法是使用事件管理器(或任何其他类型的回调机制)将所有逻辑部分粘合在一起。有了这个工具,我可以摆脱那些双重参照,这大大简化了层次结构

为了最小化耦合,我会让一个动力装置保持一个弱引用到一个可通知的(所以播放器是可通知的);然后,动力装置可以通知玩家自己等。我认为不严格要求单独的事件管理器。