Одним из способов правильной инъекции зависимостей является разделение создания объектов с бизнес-логикой. Как правило, это предполагает использование Factory для создания объекта.Можно ли передавать параметры на заводский метод?
Вплоть до этого момента, я никогда серьезно не рассматривал возможность использования завода, поэтому я прошу прощения, если этот вопрос кажется немного упрощенным:
Во всех примерах Factory Pattern, который я перебежать, я всегда см. очень простые примеры, которые не имеют параметризации. Например, здесь фабрика украдена у Misko Hevery's отличная статья How To Think About the "new" Operator.
class ApplicationBuilder { House build() { return new House(new Kitchen( new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Однако, что произойдет, если я хочу, чтобы каждый дом, который я построил, имел имя? Я все еще использую шаблон Factory, если я переписал этот код следующим образом?
class ApplicationBuilder { House build(const std::string & house_name) { return new House(house_name, new Kitchen(new Sink(), new Dishwasher(), new Refrigerator()) ); } }
Обратите внимание, что мой метод Factory вызов изменился от этого:
ApplicationBuilder builder; House * my_house = builder.build();
Для этого:
ApplicationBuilder builder; House * my_house = builder.build("Michaels-Treehouse");
Кстати: Я думаю, что концепция разделения объекта инстанцировании от бизнес-логики отлично, я просто пытаюсь понять, как я могу применить его к моей собственной ситуации. Меня смущает то, что все примеры, которые я видел в шаблоне Factory, никогда не передают никакие параметры в функцию build().
Чтобы быть ясным: я не знаю названия дома до момента, прежде чем мне понадобится его создать.
Я часто видел, что заводы принимают параметры, как вы показали. В этом нет ничего плохого. Или с точки зрения вашего вопроса. Это нормально. – grieve