У меня проблема в ОО-дизайне, когда я получаю дубликат кода в 2 разных классах. Вот что происходит:
В этом примере я хочу обнаружить столкновение между игровыми объектами.
У меня есть базовый CollisionObject, который содержит общие методы (такие как checkForCollisionWith) и CollisionObjectBox, CollisionObjectCircle, CollisionObjectPolygon, которые расширяют базовый класс.
Эта часть дизайна кажется нормальной, но вот что меня беспокоит: звоню
aCircle checkForCollisionWith: aBox
выполнит проверку столкновения окружности и ящика внутри подкласса Circle. В обратном порядке
aBox checkForCollisionWith: aCircle
выполнит проверку столкновения бокса и круга внутри подкласса бокса.
Проблема здесь в том, что код коллизии Circle vs Box повторяется, так как он есть в классах Box и Circle. Есть ли способ избежать этого, или я подхожу к этой проблеме неправильно? Сейчас я склоняюсь к тому, чтобы иметь вспомогательный класс со всем дублирующим кодом и вызывать его из объектов aCircle и aBox, чтобы избежать дублирования. Мне любопытно, есть ли более элегантное ОО-решение для этого?