我在面向对象设计中遇到了一个问题,即在两个不同的类中出现了重复的代码。以下是具体情况:
在这个例子中,我想要检测游戏对象之间的碰撞。
我有一个基本的CollisionObject类,其中包含一些通用方法(例如checkForCollisionWith),以及CollisionObjectBox、CollisionObjectCircle和CollisionObjectPolygon等继承自该基类的类。
这部分设计看起来还不错,但是让我感到困扰的是:
aCircle checkForCollisionWith: aBox
在 Circle 子类中执行圆形和矩形之间的碰撞检查。反过来,在 Box 子类中执行矩形和圆形之间的碰撞检查。
aBox checkForCollisionWith: aCircle
将在Box子类中执行盒子与圆形的碰撞检查。
问题在于,圆形与盒子的碰撞代码是重复的,因为它们都在Box和Circle类中。是否有避免这种情况的方法,或者我处理这个问题的方式有误?目前,我倾向于使用带有所有重复代码的辅助类,并从aCircle和aBox对象调用它以避免重复。不过,我很好奇是否有更优雅的面向对象的解决方案。
checkForCollisionWithX
。 - chelmertz