Википедия имеет фабричный шаблон страницы.
Для простых случаев действительно нет хитрости. Just
Foo* createFoo() {
return new Foo();
}
Это становится сложнее, когда вы хотите сделать больше, чем просто использовать новое. Один хороший пример - если конструктор принимает несколько параметров или если объекты нужно как-то инициализировать. В этом случае вы можете загрузить фабрику с требованиями и не заставлять разработчика беспокоиться о них:
class BarFactory {
BarFactory(Dep* x, Depen* y) ...
getBar() {
return new Bar(x->SOME_METHODS, y->SOMETHINGELSE, ...);
}
}
В этом примере фабрика устраняет путаницу из правильного создания объекта Bar (представьте, что потребовалось больше аргументов, и им нужно было много рук) Это может быть полезно, когда у вас есть API с большим количеством опций, которые не меняются, или просто плохой API.