На самом деле, это "древовидный граф" (у него один корень, и он иерархичен, ... всё бы ничего, однако некоторые его узлы могут иметь по несколько родителей).
Проблема в том, что он на самом деле должен содержать полиморфные объекты; объекты-узлы разных типов могут иметь потомков и родителей разных типов (множество комбинаций для каждого типа определено), причем:
1. Необходимо обеспечить безопасное удаление элементов, чтобы при удалении объекта все его "соседи" об этом знали.
2. Допустим, есть объект a класса A, его потомками могут быть объекты классов B и C. Нужно обеспечить возможность получения клиентом от объекта a двух множеств: "потомки a, класса B" и "потомки a, класса C".
3. Не повредило бы наличие средства для локальной работы с "поддеревьями".
4. А если это всё, да ещё и попотокобезопаснее, -- это было бы более, чем замечательно.
5. Пробовал заключить информацию о родителях/потомках в сами классы -- ничего хорошего. Теперь собираюсь сделать "менеджера связей", в этой связи напрашивается использование БД, но, насколько я знаю, с рекурсивными алгоритмами (а их у меня множество) запросы БД лучше не мешать (или мешать, но как -- мне не известно), и, наконец, как же быть с пунктом 3 ?
6. Работать, видимо, придется, ограничивая доступ к узлам дерева прокси-интерфейсом в сочетании с фабриками (удаление, создание объектов). Прав ли я ?
7. И ещё один тупой вопрос: как в данном случае лучше организовывать доступ объектов-узлов к менеджеру: хранить в объекте ссылку на менеджера, полученную при создании объекта, или юзать оного глобально ?
Уважаемые знатоки, подскажите, пожалуйста способы решения.
Заранее спасибо за помощь.