Это действительно зависит от объема вашей системы.
Если вы действительно хотите пойти «на все сто», этим должен заниматься третий класс, представляющий «физику» взаимодействия в вашей системе.
Вот почему:
Во-первых, столкновение может иметь много последствий: взрывы, повреждения, выигрыши (это игра)? звук и т. д. Вы не хотите перегружать их всех при столкновении.
С другой стороны, взрывы могут произойти по разным причинам (например, оружие), должен ли взрыв явно знать все, что может его вызвать?
Если вы моделируете много граней "мира", вы можете захотеть иметь третью систему, которая отвечает за эти причины и следствия. Он берет то, что ему нужно, от состояния одного объекта и создает другой с необходимым состоянием, без необходимости знать друг о друге.