Метод фабрики является creational шаблоном разработки, опубликованным Бандой Четыре. Его намерение к, "Определите интерфейс для создания объекта, но позвольте подклассам решить который класс инстанцировать. Метод фабрики позволяет классу задержать инстанцирование к подклассам". (страница 107) Примечание, которое [абстрактная фабрика] является отдельным шаблоном GoF, и там дополнительна [фабрика] шаблоны за пределами GoF.

Шаблон "фабричный метод" представляет виртуального конструктора. Каноническим примером из книги GoF является платформа для приложений, которые представляют несколько документов. Платформа обрабатывает создание документа, но тип документа варьируется для каждого конкретного приложения с помощью платформы. Другими словами, платформа, (страница 107)

... только знает, когда новый документ должен быть создан, не какой Документ для создания. Это создает дилемму: платформа должна инстанцировать классов, но она только знает об абстрактных классах, которых она не может инстанцировать.

Шаблон "фабричный метод" предлагает решение. Это инкапсулирует знание, которого подкласса Документа создать и перемещает это знание из платформы.

Шаблон реализован четырьмя участниками. (страница 108)

  • Продукт (Документ) - определяет интерфейс объектов, которые создает метод фабрики.
  • ConcreteProduct (MyDocument) - реализации Product интерфейс.
  • Создатель (Приложение) - объявляет метод фабрики, который возвращает объект типа Product.
  • ConcreteCreator (MyApplication) - переопределяет метод фабрики возвратить экземпляр a ConcreteProduct.

Банда Четыре предлагает следующие критерии применения Шаблона "фабричный метод".

Используйте Шаблон "фабричный метод" когда

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

Шаблон имеет несколько вариантов. (страница 110)

  • Два основных изменения Шаблона "фабричный метод" (1) случай когда Creator класс является абстрактным классом и не обеспечивает реализацию для метода фабрики, который он объявляет, и (2) случай когда Creator реальный класс и обеспечивает реализацию по умолчанию для метода фабрики.
  • Другая вариация на шаблон позволяет методу фабрики создать несколько видов продуктов. Метод фабрики берет параметр, который определяет вид объекта создать. Все объекты, которые создает метод фабрики, совместно используют Product интерфейс.

Посмотрите Метод фабрики для более длинной сводки книги GoF.

Обратите внимание, что Банда Четыре опубликовала два различных шаблона "фабрика", при этом другой была . Кроме того, вне книги GoF существуют шаблоны "фабрика", таким образом, термин "фабрика" отдельно неоднозначен.