java - 有时我不知道某些方法属于哪个类。我究竟做错了什么?

标签 java c# class refactoring

假设有一个简单的游戏,我有一个名为 Player 的类,其中包含玩家拥有的所有信息,例如name , xPosition , yPosition , width , height

Player类还具有与其关联的方法,这些方法描述了 Player 的含义。可以做,例如move() , draw()

在游戏中,我需要能够知道何时出现 Player与游戏中的任何其他物体发生碰撞,例如墙壁、天花板或其他世界物体。

我可以通过两种方式解决这个问题:

创建一个类似 CollisionDetecter 的类有一个类似 detectCollision() 的方法。在 Player 中包含此类的实例上课并调用 detectCollision()适当时的方法

理由:

  • 检测碰撞实际上并不是 Player 的固有属性。就像xPosition , yPositionname是,所以它不属于此类。

  • Player 中的困惑更少类(class)。 (这算不算?)

创建类似 detectCollision() 的方法在 Player检查 Player 是否存在的类击中了任何东西

理由:

  • 检测碰撞是 Player 的事情。这样做detectCollision()方法应该直接在Player中类(class)。

  • 只有玩家需要能够检测碰撞,那么为什么我应该为此创建另一个只有 1 个方法的整个类呢?为什么不将其作为方法包含在 Player 中类?

我觉得我总是在这样的辩论中挣扎。

哪种方法最合适?为什么?这两者都不好吗?我应该做点别的吗?

最佳答案

一般情况:-

有时,最好从玩家类别开始,看看会产生什么后果。重构最终是你的 friend ,如果你发现你正在编写的方法需要与 Player 并不真正相关的东西,那么你就开始制定新的设计。

具体:-

也许玩家是一个游戏对象,而碰撞检测是一个通用概念,用于确定游戏对象之间的碰撞。

也许玩家并不是真正的类,也许玩家只是一个具有移动策略的游戏对象,即玩家实际上是由游戏的更基本方面组成的。

关于java - 有时我不知道某些方法属于哪个类。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38625990/

相关文章:

java - java "... "运算符做什么(在类构造函数中找到)

java - 如果列表包含java中数组形式的值,如何从列表中获取值

java - 验证 "Invalid byte 1 of 1-byte UTF-8 sequence."中的 XML 文档结果

c# - 使用变量赋值与重复方法

c# - 我应该使用 AutomationPeer 还是 AutomationElement?或两者?

c# - 检查按钮按下是否导致任何代码被执行

java - 为什么带有前导零的整数文字会被奇怪地解释?

java - 无法更新 arrayList 中的元素

java - 初始化类变量时类变量的类加载顺序

c++ - 将指向传感器的指针添加到链表