Java 有时候我不';我不知道某些方法属于哪个类。我做错了什么?

Java 有时候我不';我不知道某些方法属于哪个类。我做错了什么?,java,c#,class,refactoring,Java,C#,Class,Refactoring,假设有一个简单的游戏,我有一个名为Player的类,它保存了玩家应该拥有的所有信息,例如name,xPosition,yPosition,width,height,等等 Player类还具有与之相关联的方法,这些方法描述了Player可以做什么,例如move(),draw(),等等 在游戏中,我需要能够知道玩家何时与游戏中的任何其他物体碰撞,如墙、天花板或其他世界物体 我可以从两个方面着手: 创建一个类,比如CollisionDetecter,它有一个方法,比如detectCollision()

假设有一个简单的游戏,我有一个名为
Player
的类,它保存了玩家应该拥有的所有信息,例如
name
xPosition
yPosition
width
height
,等等

Player
类还具有与之相关联的方法,这些方法描述了
Player
可以做什么,例如
move()
draw()
,等等

在游戏中,我需要能够知道
玩家
何时与游戏中的任何其他物体碰撞,如墙、天花板或其他世界物体

我可以从两个方面着手:

创建一个类,比如
CollisionDetecter
,它有一个方法,比如
detectCollision()
。在
Player
类中包含该类的实例,并在适当时调用
detectCollision()
方法

理由:

  • 检测碰撞并不像
    xPosition
    yPosition
    name
    那样是
    播放器的固有属性,因此它不属于此类

  • 播放器
    类中的混乱更少。(这算吗?)

Player
类中创建一个类似
detectCollision()
的方法,该方法检查
Player
是否命中了任何对象

理由:

  • 检测碰撞是
    Player
    所做的事情,因此
    detectCollision()
    方法应该直接在
    Player
    类中

  • 只有玩家需要能够检测碰撞,那么为什么我要用一个方法创建另一个完整的类呢?为什么不把它作为一个方法包含在
    Player
    类中呢

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

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

一般来说:-

有时候,最好从玩家类开始,看看后果如何。重构最终是你的朋友,如果你发现你正在编写的方法需要的东西与Player不太相关,那么你就开始设计一个新的设计

具体而言:-

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

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

您的问题似乎取决于意见。