【发布时间】:2013-03-06 17:15:04
【问题描述】:
如果类 A 与类 B、C 和 D 中的每一个都有唯一的交互,那么交互的代码应该在 A 中还是在 B、C 和 D 中?
我正在编写一个小游戏,其中许多对象可以与其他对象进行独特的交互。例如,EMP 命中 sentry gun 并禁用它。它还可以击中grenade 并引爆它,也可以击中player 并施加减速效果。
我的问题是,这段代码应该放在 EMP 类中,还是分散在所有其他类中?我的直觉告诉我要多态地执行此操作,以便我只需告诉每个类处理它喜欢的 EMP 罢工,这将允许我添加更多项目并更改它们处理 EMP 的方式,而无需更改 EMP 代码。
但是,EMP 目前只与我的 50 个对象中的大约 4 个进行交互,因此用空的 RespondToEMP() 调用填充 46 个对象似乎是错误的。这似乎也有点不直观,如果我决定删除 EMP,我需要更改所有其他类,而 EMP 类本身最终会变得非常小。这也意味着如果我想改变 EMP 的行为方式,我需要查看所有不同的类以找到所有可能的用法。此外,如果 EMP 有一些通用效果,例如爆炸,那么这种效果肯定会在 EMP 代码中,远离所有其他会分发的效果。
【问题讨论】:
-
您没有提到您使用的是什么编程语言,但这听起来像是协议(在 Objective-C 中)或接口(在 Java 中)的完美用例。然后,当您的 EMP 引爆时,它可以检查范围内的对象是否符合协议,如果符合,则调用协议方法。
-
最好有一个中心类来处理这些交互。 IE。一个“交互”类,其方法在每次发生可导致交互的动作时调用。然后,您可以遍历“范围内”的所有对象并说
if action is EMP and target conforms to protocol EMP then send EMP_DETONATED message to target。这样,当您添加新交互时,所有代码都在一个位置,您只需在适当的类中实现协议。
标签: oop polymorphism