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

Типы шаблонов проектирования

Одноэлементный шаблон проектирования

Шаблон проектирования Singleton — это творческий шаблон проектирования. Это гарантирует создание только одного экземпляра объекта.

Пользователи шаблона проектирования Singleton

· Гарантирует, что существует только один экземпляр класса.

· Это важно при доступе к внешним ресурсам/аппаратному интерфейсу.

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

· Чтение конфигурации в приложении.

· Кэширование

· Это также используется в других шаблонах проектирования, таких как Abstract Factory, Builder, Prototype, Facade.

Диаграмма классов

Существует частный экземпляр,имя которого совпадает с именем класса (Singleton). Конструктор также является частным. Существует общедоступный метод с именем GetInstance(). Он возвращает тот же объект классу.

Реализация шаблона

· Частный конструктор для ограничения создания экземпляра класса другими классами.

· Частная статическая переменная того же класса, который является единственным экземпляром класса.

· общедоступный статический метод возвращает экземпляр класса; это глобальная точка доступа для внешнего мира, чтобы получить экземпляр одноэлементного класса

Выход:

Заводской шаблон проектирования

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

Пользователи Factory Design Pattern

· Отделяет клиентский код от конкретных классов, которые необходимо создать.

· При разработке приложений, если вы видите возможность инкапсулировать код создания объекта, примените фабричный шаблон.

· Дизайн начинается с шаблона Factory и развивается в направлении Abstract Factory, Prototype или Builder.

Схема UML для шаблона Factory

Пример. Мы собираемся создать интерфейс Shape и конкретные классы, реализующие интерфейс Shape. Фабричный класс ShapeFactory определяется как следующий шаг.

FactoryPatternDemo, наш демонстрационный класс будет использовать ShapeFactory для получения объекта Shape. Он передаст информацию (CIRCLE / RECTANGLE / SQUARE) в ShapeFactory, чтобы получить нужный тип объекта.

Реализация шаблона

· Создать интерфейс или абстрактный класс

· Создание конкретных классов, реализующих тот же интерфейс/абстрактный класс

· Создать фабрику для создания объекта конкретного класса на основе заданной информации

Выход:

Шаблон проектирования прототипа

Шаблон проектирования прототипа — это творческий шаблон проектирования. Это создает клон существующего объекта вместо создания нового, а также может быть настроено в соответствии с требованиями. Мы не используем здесь новое ключевое слово. Это позволяет нам скрыть от клиента сложность создания новых экземпляров. Скопированный объект может изменять только необходимые свойства. Такой подход экономит ресурсы и время. Использование метода clone() — один из лучших способов создать объект из существующих объектов. Основными преимуществами этого шаблона проектирования являются уменьшение необходимости создания подклассов, скрытие сложностей создания объектов, клиенты могут получать новые объекты, не зная, какой это будет тип объекта, а также он позволяет добавлять или удалять объекты во время выполнения.

Пользователи шаблона проектирования прототипа

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

Схема UML

Пример. Мы собираемся создать абстрактный класс Shape и конкретные классы, расширяющие класс Shape. Класс ShapeCache определяется как следующий шаг, который сохраняет объекты формы в Hashtable и возвращает их клон по запросу.

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

Шаблон строителя

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

UML-диаграмма шаблона проектирования Builder

Преимущества использования шаблона проектирования Builder

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

Шаблон проектирования цепочки ответственности

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

Шаблон цепочки ответственности применим в следующих случаях:

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

Схема UML для шаблона цепочки ответственности

Преимущества шаблона проектирования цепочки ответственности

· Уменьшить степень сцепления. Развязка запросит отправителя и получателя.

· Упрощенный объект. Объекту не нужно знать структуру цепочки.

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

· Увеличение обработки запросов нового класса очень удобно.

Памятный шаблон дизайна

Шаблон проектирования Memento — это поведенческий шаблон проектирования. Это используется для восстановления состояния объекта до предыдущего состояния. По мере выполнения вашего приложения вы можете сохранять контрольные точки в своем приложении и восстанавливать их позже.

Шаблон проектирования UML Diagram Memento

Компоненты дизайна

· создатель: объект, для которого должно быть сохранено состояние. Он создает сувенир и использует его в будущем для отмены.

· сувенир: объект, который будет поддерживать состояние создателя. Это просто ПОЖО.

· смотритель: объект, который отслеживает несколько сувениров. Например, сохранение точек сохранения.

Преимущества шаблона проектирования Memento

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