Прохожу путь через книгу Head First Design Patterns.
Мне кажется, я понимаю простой фабричный и фабричный метод, но мне сложно понять, какие преимущества фабричный метод дает по сравнению с простым фабричным.
Если объект A использует простую фабрику для создания своих объектов B, клиенты могут создать его следующим образом:
A a = new A(new BFactory());
тогда как если объект использует фабричный метод, клиент может создать его следующим образом:
A a = new ConcreteA(); // ConcreteA contains a method for instantiating
// the same Bs that the BFactory above creates, with
// the method hardwired into the subclass of A, ConcreteA.
Таким образом, в случае простой фабрики клиенты составляют A с фабрикой B, тогда как с помощью метода фабрики клиент выбирает соответствующий подкласс для типов B, которые он хочет.
Кажется, между ними не так уж много выбора. Либо вы должны выбрать, с какой BFactory вы хотите составить A, либо выбрать правильный подкласс A, чтобы получить Bs.
При каких обстоятельствах одно лучше другого?
Спасибо всем!
Редактировать: Немного добавить к путанице. ИМО - это объяснение, данное в повествовании «Первая глава», где они переходят от простого метода к фабрике, говоря (стр.119) «франшизы использовали вашу [простую] фабрику для создания пиццы, но начинают использовать свои собственные домашние процедуры для остальной части процесса: они пекли вещи немного по-другому ... ", и у них есть такая картина шеф-повара, который, очевидно, сделал что-то отвратительное с его пиццей.
Но нет ничего об использовании простой фабрики, которая предоставляет клиентам доступ к методу bake () или к любой другой части процесса. И нет ничего об использовании фабричного метода, который помог бы, если бы были какие-либо проблемы с ним.
Так что мне кажется, что Head First подразумевает, что использование фабричного метода вместо простой фабрики является фиктивным.