Чем в основном отличается внедрение зависимостей от паттерна Factory Design? - PullRequest
1 голос
/ 14 сентября 2011

Не могли бы вы вкратце объяснить: Чем в основном отличается внедрение зависимостей от шаблона Factory Design?

Дополнительно: возможно ли очень просто продемонстрировать разницу на примере кода?

Спасибо

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Шаблон фабрики обычно полезен для многократного создания экземпляров объекта с возможно сложной логикой создания экземпляров.Таким образом, ваши классы знают фабрики и запрашивают экземпляры.

Внедрение зависимостей продвигается на один шаг дальше к полностью абстрактной логике создания экземпляров для ваших классов.Все, что нужно вашему коду, - это объявить зависимости, которые им нужны, не беспокоясь о том, откуда они берутся.

Подробное руководство см. В Инверсия контейнеров управления и шаблон внедрения зависимостей .

2 голосов
/ 14 сентября 2011

С фабрикой (или любым другим шаблоном создания) вызывающий должен знать, как получить объект, и должен «явно» запрашивать его перед его потреблением.

Car car = CarFactory.getCarByModel(LUXURY);

В то время как при использовании DI,ответственность за передачу нужного объекта делегируется некоторому внешнему (в основном контейнеру) объекту, который знает, как создать объект (путем чтения уже определенной конфигурации) и сделать его доступным для вызывающего абонента без вывода сообщений.

Car car = getCar();
void setCar(Car car){..} // container sets the car fromoutside
0 голосов
/ 14 сентября 2011

Одинаковые цели достигаются с обоими шаблонами, просто с шаблоном проектирования фабрики вы должны писать код, тогда как с DI вы используете существующую структуру DI, чтобы выполнить работу за вас и просто выполнить настройку зависимостей. С шаблоном фабрики вы должны написать фабрики для своих классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...