Порождающие шаблоны — обзор

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

Главную обзорную страницу можно найти здесь.

Вид узора связан с процессом создания предметов. Это вводит больший контроль над процессом. Цель состоит в том, чтобы разделить процесс создания и представления объекта.

Можно реализовать пять хорошо известных шаблонов проектирования:

  • Сингелтон
  • Абстрактная фабрика
  • Прототип
  • Заводской метод
  • Строитель

Сингелтон

Singelton полезен, когда мы хотим поделиться функциональностью с другими классами через один экземпляр. Цель состоит в том, чтобы ограничить возможность создания нескольких объектов класса только одним экземпляром.

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

Ниже я представляю простой кеш и его использование:

Вот часть реализации кода выше, показывающая, как работает кэширование.

Абстрактная фабрика

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

Я подготовил пример про хранение вещей.

Класс 'StorageFactory' описывает интерфейс для хранения жидкостей в вещах — есть две функции: 'CreateThing' и 'CreateLiquid'.
Класс 'InventoryFactory' отвечает за хранение нефти в бочке.
Класс 'TankFactory' отвечает за хранение воды в резервуаре.

Последний класс — «Storage» — имеет ссылку на «StorageFactory» и имеет один метод «FillThingWithLiquid». Пожалуйста, посмотрите на пример ниже:

Результат:

Бочка заполнена маслом
Бак заполнен водой

Тот же самый код можно подготовить с помощью интерфейсов. Пример ниже.

Пример того, как вы можете запустить его.

Строитель

Обычно этот шаблон состоит из двух основных элементов: «Builder» и «ConcreteBuilder». Первый из них(‘Builder’)предназначен для предоставления интерфейса для создания объектов, называемых продуктами. Второй элемент предлагает создать конкретное представление продукта с помощью реализованного интерфейса «Builder». Последней частью этой схемы является объект с именем «Директор». Это куратор. Он отвечает за правильный порядок построения объектов.

Я подготовил пример по этому поводу.

Продукт – это небольшой класс, у которого есть Имя и Цена. Класс «ProductInformation» описывает, что мы хотим получить. Интерфейс ‘IPProductsInformationBuilder’ имеет четыре метода, которые необходимо запускать в правильном порядке. Класс ‘ProductsInformationBuilder’ реализует интерфейс и предназначен для подготовки всего для Director. «ProductsInformationDirector» имеет только один метод, который вызывает методы из Builder в правильном порядке.

Пример того, как вы можете запустить его.

Результат:

Это простой отчет по товарам — 6.
Суммарная цена по всем товарам 24,5.

Прототип

Если вам нужно воспроизвести несколько экземпляров объектов, вы должны использовать этот шаблон. Шаблон проектирования прототипа описывает, как копировать объект. За это отвечает сам класс. В .NET есть специальный интерфейс под названием «ICloneable».

Ниже приведена простая схема для него:

Я подготовил простой пример. Существует три класса: «GeometricalFigure» (базовый класс), Rectangle и Square.

Пример того, как вы можете запустить его.

Заводской метод

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

«ApplicationRentBike» создает класс Bike, следующий класс «ApplicationRentCar» создает объект класса Car.

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

Резюме

Шаблоны создания помогают проектам гибко развиваться. Они более полезны, чем жестко запрограммированное поведение. Это позволяет создавать объекты контролируемым образом, что снижает сложность и повышает стабильность.

Приглашаю вас прочитать другие статьи из этой серии:

Вы можете подписаться/связаться со мной по этой ссылке: Daniel Jankowski.

Ссылки: