A1x
Новичок
а чем не устраивает обычный паттерн Composite?работать именно с объектами как со структурой.
общий абстрактный класс SkyObject
примитивные типы - Star, Planet, Moon, Comet, Asteroid, BlackHole .... extends SkyObject
абстрактный составной тип-контейнер - CompositeSkyObject extends SkyObject (добавляет коллекцию компонентов-потомков, методы addChild(SkyObject $o), getChildren(...), etc.)
конкретные составные типы Galaxy, SolarSystem, PlanetSystem ... extends CompositeSkyObject
каждый объект имеет в качестве родительского компонента один из составных типов, простые типы, например звезда, не могут иметь потомков (на то они и простые)
системы с двойными/тройными звездами создаются без проблем... но проверять тип добавляемого чилда прийдется с помощью дополнительной логики