Боюсь, что используемые имена не имеют значения usual
, поэтому без примеров того, что вставлено или как они используются, будет трудно догадаться.
Необходимо проверить 2 шаблона проектирования, которые интенсивно используют этот вид self-recursion
(на уровне класса *):
И я боюсь, что вы смотрите на то, что не подражает ни одному из них.
В Decorator
смысл заключается в добавлении функциональности. Для этого у вас есть Interface
, из которого происходит класс Concrete
и интерфейс Wrapper
. Тогда различные обёртки получатся из Wrapper
, и вы можете их связать:
Interface* interface = new Wrapper2( new Wrapper1 ( new Concrete() ) );
Каждая оболочка добавляет некоторую функциональность, тогда как здесь у нас только идеальная пересылка ... так что это не Decorator
.
Шаблон Composite
отличается. Его цель - скрыть, обрабатываете ли вы набор элементов или один элемент. Обычный пример - дерево: вы можете применять операции либо ко всему поддереву, либо к листовому узлу, если он реализован с использованием шаблона Composite
.
Еще раз, здесь нет такого понятия.
Так что я предпочитаю, что у вас либо дикий дизайн (возможно, ошибочная попытка подражать известному шаблону), либо вы не дали достаточно информации (исходного кода), чтобы мы могли выяснить роль. В любом случае это кажется странным.
* Примечание: под self-recursion
на уровне класса я имею в виду, что объект класса A
указывает на другой объект класса A
, но это не означает (безусловно), что он указывает на тот же экземпляр .. иначе у нас было бы переполнение стека (каламбур). Этот не тот же экземпляр бит, безусловно, стоит проверить во время вызова SetImplementation
: обратите внимание, что любая циклическая ссылка может привести к смерти в результате рекурсии.