В абстрактной фабрике вы объявляете тип, который отвечает за создание объектов.Где создать AbstractFactory
Это позволит предотвратить требующий выключателя как это:
if(type == ONE) {
doOne();
} else if(type == TWO) {
doTwo();
} etc.
Или же:
switch(type) {
case ONE: doOne(); break;
case TWO: doTwo(); break;
etc....
}
В это:
MyAbstractFactory factoryInstance = ... ?
SomeObject object = factoryInstance.createObject();
object.doX();
Как я понимаю AbstractFactory создаст правильный объект который, в свою очередь, выполнит полиморфно правильное поведение.
Затем, если вы используете этот объект 10-20 или 100 раз в своей прогаме, вам не нужно каждый раз повторять переключатель. Вы просто выполняете соответствующий метод и оставляете полиморфизм выполнять эту работу.
object.doY();
object.doZ();
Добавление нового типа так же просто, как создать новую бетонную фабрику.
Все это ясно для меня. Но ...
Где и как создается конкретная фабрика (в общих чертах) в первую очередь?
Я всегда использовал одну единственную точку (обычно в методе main() или в методе Configuration.init()), который, в свою очередь, имеет конструкцию if/else | switch, которая неизбежна, но по крайней мере она используется только один раз.
Однако я сделал это «инстинктивно» (или здравым смыслом), но никогда не читал ни в одном из документов, описывающих шаблон, где он должен быть создан.
:)
Это спорный вопрос? Похоже, вы уже ответили на него в своем втором-последнем абзаце! –
Почему бы вам просто не использовать Spring и фасонные фабрики, которые он предоставляет? –
Если else/switch не является неизбежным, но вполне может быть реализацией, которая будет работать лучше всего. (вам в основном нужна таблица перехода, и если вы включите int, то вы получите из блока переключателей, но вы можете использовать массив создателей и некоторый индекс (нужный вам тип) –