Нет, я не думаю, что (A) есть общие идиомы ООП для того, что вы делаете, и (B) какие-либо выдающиеся паттерны, подобные вашим. И (C), это абсолютно нормально . Теперь, может быть, вы должны делать это таким образом, а может быть, вам не следует. Всякий раз, когда вы делаете что-то, что вам трудно описать, вы, конечно, должны сами догадаться и задуматься, есть ли более простой способ сделать это. Но отсутствие общей терминологии для описания вашей модели и отсутствие ее соответствия «шаблону», о котором вы слышали, само по себе не указывает на проблему . Занятиям иногда приходится делать дурацкие вещи под капотом. В этом-то и дело. Если вы инкапсулируете много сложностей для потребителей этих классов, и они интуитивно понятны, логичны и открыты для них, тогда отлично!
Это ошибка, если неправильно использовать общие термины, чтобы попытаться помочь кому-то понять. На самом деле, использование вами термина наследовать выше действительно смутило меня, и я до сих пор не уверен на 100%, что он у меня есть. Это так?
Объект класса ClassA поддерживает коллекцию объектов ClassB. Кроме того, некоторые функциональные возможности объекта ClassA должны воздействовать не только на его собственные объекты ClassB, но и на те, которые поддерживаются другими объектами ClassA. С этой целью объект ClassA поддерживает ссылки на другие объекты ClassA.
Предполагая, что это правильно, конечно, я думаю, что это хороший способ описать это. И поскольку здесь нет точно никакого наследования, люди могут запутаться, если использовать этот термин. Кроме того, никогда не огорчайтесь, если то, что вы делаете, не совпадает с каким-то шаблоном .