我在 OO 设计中遇到问题,最终在 2 个不同的类中出现重复代码。这是发生了什么:
在这个例子中,我想检测游戏对象之间的碰撞。
我有一个基础 CollisionObject,它包含扩展基类的常用方法(例如 checkForCollisionWith)和 CollisionObjectBox、CollisionObjectCircle、CollisionObjectPolygon。
这部分设计看起来不错,但让我感到困扰的是:调用
aCircle checkForCollisionWith: aBox
将在 Circle 子类中执行圆形与框碰撞检查。相反,
aBox checkForCollisionWith: aCircle
将在 Box 子类中执行 box vs circle 碰撞检查。
这里的问题是 Circle vs Box 碰撞代码是重复的,因为它在 Box 和 Circle 类中。有没有办法避免这种情况,还是我以错误的方式处理这个问题?现在,我倾向于拥有一个包含所有重复代码的辅助类,并从 aCircle 和 aBox 对象中调用它以避免重复。不过,我很好奇是否有更优雅的 OO 解决方案。