Что такое фабрика класса?

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

Что такое фабрика класса? Может кто-нибудь объяснить концепцию?

5 ответов


фабрика классов создает экземпляры других классов. Как правило, классы, которые они создают, имеют общий базовый класс или интерфейс, но возвращаются производные классы.

например, у вас может быть фабрика классов, которая взяла строку подключения к базе данных и вернула класс, реализующий IDbConnection например SqlConnection (класс и интерфейс из .Net)


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

в самом строгом смысле Фабрика классов-это функция или метод, который создает или выбирает класс и возвращает его на основе некоторого условия, определенного из входных параметров или глобального контекста. Это требуется, когда тип необходимого объекта не может быть определено до выполнения. Реализация может быть выполнена непосредственно, когда классы сами объекты на используемом языке, такие как Python.

поскольку основным использованием любого класса является создание экземпляров самого себя, в таких языках, как C++, где классы не являются объектами, которые можно передавать и манипулировать, аналогичный результат часто может быть достигнут путем моделирования "виртуальных конструкторов", где вы вызываете конструктор базового класса, но возвращаете экземпляр некоторого производного класса. Это должно быть смоделировано, потому что конструкторы не могут быть виртуальный В C++, поэтому такие фабрики классов object-not обычно реализуются как автономные функции или статические методы.

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

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

книга Джеймса Коплиена 1991 года Advanced C++: стили программирования и идиомы содержит сведения об одном из способов реализации таких виртуальных универсальных конструкторов на C++. Есть даже лучшие способы сделать это с помощью шаблоны C++, но это не было описано в книге, которая предшествует их добавлению в стандартное определение языка. Фактически, сами шаблоны C++ являются фабриками классов, поскольку они создают экземпляр нового класса всякий раз, когда они используются с разными фактическими аргументами типа. обновление: Я нашел статью 1998 года, которую он написал для EuroPLoP под названием В C++ Идиомы где, среди прочего, он пересматривает и перегруппирует идиомы в своей книге в дизайн-шаблон формы а-ля 1994 шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения книги. Обратите внимание, особенно Виртуальный Конструктор раздел (который использует его Конверт/Письмо структура узора).

см. также соответствующие ответы на вопрос фабрика классов в Python. Также смотрите Абстрактная Фабрика, Стиль Шаблона это статья доктора Добба 2001 года также о реализации их с помощью шаблонов C++.


фабрика классов-это метод, который (в соответствии с некоторыми параметрами, например) возвращает вам настраиваемый класс (не экземпляр!).


Я чувствовал, что это объясняет его довольно хорошо (для меня, во всяком случае). Фабрики класса использованы в картине дизайна фабрики, я думаю.

как другие creational картины, Оно [картина конструкции фабрики] занимается проблемой создания объекты (продукты) без указания точный класс объекта, который будет создан. Конструкция метода фабрики pattern обрабатывает эту проблему определение отдельного метода для создание объектов, подклассы которых мочь затем переопределить указать производный тип продукта, который будет создан. В более общем плане термин фабричный метод часто используется для обозначения к любому методу, основная цель которого создание объектов.

http://en.wikipedia.org/wiki/Factory_method_pattern

извинения, если вы уже прочитали это и нашли его недостаточным.


статья в Википедии дает довольно хорошее определение:http://en.wikipedia.org/wiki/Factory_pattern

но, вероятно, самое авторитетное определение будет найдено в Шаблоны Проектирования книга Gamma et al. (обычно называют бандой четырех книг).