两个对象彼此了解

bgu*_*ach 6 language-agnostic oop

我有以下问题:我正在设计一个游戏并总结让我们说我有三个类:

  • 播放机
  • 发电厂
  • 单元

一些"用例"

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

我能让这个工作的唯一方法是,玩家知道PowerPlants和Units,但每个PowerPlant和Unit都知道他的玩家/所有者,这样他们就能以两种方式进行交流.

我不知何故认为这是一种代码味道......当我遇到类似的情况时,我总是遇到麻烦.

提前致谢.

Ped*_*rom 5

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

YMMV,但在我的情况下,我并不是真的想在这些不同的类之间建立直接关系,而是在事情发生时通知对方,所以我找到的更清洁的方式是拥有一个事件管理器(或任何其他类型)回调机制)将所有逻辑部分粘合在一起.有了这个工具,我发现我可以摆脱所有那些简化了层次结构的双重引用.