ИМХО, что вы описываете, является "естественным" способом для ОО. Ваш XXX.getXXXList () является интерфейсом для ваших классов. И для ограниченного числа классов это было бы правильным способом.
Учтите, что существует 1000 классов, которые могут быть "взаимосвязаны". Чем может быть интересно иметь некоторый ManyToManyManager для добавления объекта, добавления другого объекта к связанным объектам объекта и получения списка всех объектов, переданных другому объекту. Это было бы своего рода делегированием против реализации.
Конечно, если вы делегируете свой «многие ко многим» другому экземпляру, ваша объектная модель больше не отражает это отношение «многие ко многим».