Обзор темы [Шаблоны проектирования]

Затем: МотивацияНазначение

Определяет интерфейс для создания объекта, но позволяет подклассам решить какой класс им инстанцировать. Метод Фабрики позволяет классу перекладывать инстанцирование на подклассы.

Затем: СтруктураМотивация

Каркас приложения использует абстрактные классы, чтобы определять и поддерживать связи между объектами. Оно часто ответственно и за создание этих объектов.

Рассмотрим каркас приложений, которые могут представлять пользователю несколько документов. В этой структуре можно выделить две абстракции - классы Application и Document. Оба этих класса абстрактны, а клиент должен реализовывать их подклассы в своих приложениях. Чтобы создать приложение для рисования, например, мы определяем классы DrawingApplication и DrawingDocument. Класс Application ответствен за управление документами (например создает их когда пользователь выбирает команды Open или New из меню).

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

Шаблон Метода Фабрики предлагает следующее решение. Он инкапсулирует информацию о том, который подкласс Document создать и выносит эту информацию за пределы каркаса.

Подклассы Application переопределяют абстрактную операцию CreateDocument, чтобы возвратить соответствующий подкласс Document. Будучи инстанцированным, Application может инстанцировать специфические для приложения Document-ы не зная их классы. Мы называем CreateDocument методом фабрики, потому что он отвечает за "производство" объекта.

 

Затем: Составные частиСтруктура

Затем: СотрудничествоСоставные части