Идея паттерна Фабричный метод (Factory Method)

Паттерн проектирования — это продуманный способ построения исходного кода программы для решения часто возникающих в повседневном программировании проблем проектирования. Иными словами, это уже придуманное решения, для типичной задачи. При этом паттерн не готовое решение, а просто алгоритм действий, который должен привести к желаемому результату. Давайте рассмотрим один из наиболее часто используемых порождающих паттернов — Фабричный метод (Factory Method).

Как я уже писал ранее, существует три вида паттернов проектирования:

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

Фабричный метод (Factory Method) — это порождающий паттерн, который задает интерфейс создания экземпляра объекта, но при этом позволяет наследникам решать экземпляр какого типа создавать. То есть, базовый класс определяет интерфейс создания экземпляра, а реализацию процесса инстанцирования предоставляет наследникам.

Архитектура шаблона Factory Method

Фабричный метод (Factory Method)

Фабричный метод (Factory Method)

  • Creator — объявляет абстрактный или виртуальный метод создания продукта. Использует фабричный метод в своей реализации
  • ConcreteCreator — реализует фабричный метод, который возвращает ConcreteProduct
  • Product — определяет интерфейс продуктов, создаваемых фабричным методом
  • ConcreteProduct — определяет конкретный вид продуктов.

Логика работы Фабричного метода

Рассмотрим основную логику работы паттерна Фабричный метод. На самом деле данный паттерн является частным случаем другого паттерна, рассмотренного нами ранее в статье Паттерн проектирования Шаблонный метод (Template method) на языке C#. В базовом классе создателе мы определяем метод создания нового экземпляра базового класса продукта. И в дальнейшем реализуем этот метод для конкретных создателей и продуктов. В качестве примера давайте рассмотрим устройство для изготовления денег. Мы можем создать различные валюты соответствующие устройства для их печати. Давайте рассмотрим пример кода.

Реализация паттерна проектирования Фабричный метод (Factory Method) на языке C#

Для начала создадим базовый класс для валюты.

Теперь определим базовый класс для устройств печатающих деньги. Именно здесь мы объявляем фабричный метод Create

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

Ну и реализуем конкретные устройства печати для каждой из валют. Небольшие изменения так же добавлены специально для различия реализации.

И теперь нам остается только воспользоваться нашими классами для производства денег.

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

Результат работы приложения можно увидеть на изображении ниже

Исходный код приложения доступен в репозитории github.

Также рекомендую изучить статью Паттерн Шаблонный метод (Template method)

P.S. Присоединяйся в любой удобной для тебя социальной сети. Для меня очень важно оставаться с тобой на связи, ведь у меня есть еще много полезной информации о программировании для тебя.

Вконтакте
Telegram
Facebook
Twitter
Одноклассники
Дзен
Google+

 
×
%d такие блоггеры, как: