Я не знаю, есть ли официальное название для этого, но я играл с тем, что мне нравится называть «самозаготовительным» образцом. В принципе, это когда абстрактный базовый класс действует как фабрика для себя. Позвольте мне объяснить:Шаблон «Self-Factory»
У меня есть объекты Foo и объекты Bar в моей системе, которые используются через интерфейсы FooInterface и BarInterface. Мне нужно дать своим клиентам правильный тип Foo и Bar. Решение о том, какой конкретный объект Foo для создания создается во время компиляции. Например, если вы компилируете на win32, вы хотите создавать только объекты Win32Foo, а при компиляции на OSX вы хотите создавать только объекты OSXFoo и т. Д. Но решение о том, какой конкретный объект Bar создать, производится во время выполнения, на основе ключевой строки.
Теперь, мой вопрос касается наилучшего способа реализации этой схемы. Один из способов я придумываю использует регулярные заводы:
shared_ptr<FooInterface> foo = FooFactory::create();
shared_ptr<BarInterface> happyBar = BarFactory::create("Happy");
shared_ptr<BarInterface> sadBar = BarFactory::create("Sad");
Другой способ заключается в использовании того, что я называю «само-заводы»:
shared_ptr<FooInterface> foo = FooInterface::create();
shared_ptr<BarInterface> happyBar = BarInterface::create("Happy");
shared_ptr<BarInterface> sadBar = BarInterface::create("Sad");
Каковы плюсы и минусы каждого подхода, как из с точки зрения удобства использования и с архитектурной точки зрения?
Я думаю, что то, что вы предлагаете в качестве самозавода, также называется шаблоном прототипа. Вероятно, вы можете просмотреть литературу по этой схеме идей. –