После нескольких лет опыта в этой области мне кажется, что шаблон Factory является одним из менее интересных и полезных шаблонов, когда не пишется фреймворки или библиотеки.
Я не говорю, что фабричный шаблон не нужен. Например, интерфейс W3C Document
служит фабрикой для различных узлов XML (элементов, атрибутов, текста, ...). Класс AST
в Eclipse JDT служит фабрикой для ASTNode
s, таких как Assignment
, MethodDeclaration
и т. Д. Я могу найти много других примеров фреймворка / библиотеки.
Но большую часть времени в простом клиентском коде я никогда не чувствую необходимости использовать шаблон Factory. Вам все равно, откуда берутся объекты или как они создаются. Вы просто подключаете объекты через их интерфейсы с помощью Dependency Injection, после чего эти объекты могут «ожить» в зависимости от среды (например, new
вручную в простом локальном тесте, контейнер компонентов в среде Java EE, .. .). Но никогда Фабрикой, как ArticleFactory.createArticle()
.
Я понимаю, что Spring, например, можно считать «фабрикой» бинов, но фабрика бинов Spring очень универсальна, и реализация Factory, о которой я говорю, должна иметь определенный интерфейс и каким-то образом ограничиваться созданием члены предопределенного «семейства» объектов.
Я также заметил, что Factory, Composite и Visitor часто идут рука об руку, когда Factory создает набор (связанных с доменом) объектов, которые Visitor может пройти. Опять же, типичные вещи для фреймворков, но не клиентский код.
Поэтому мой вопрос: существуют ли ситуации вне рамок, где вы (будете) использовать шаблон Factory вместо простых интерфейсов и внедрения зависимостей? И если да, есть ли связанный посетитель?