Паттерны в разработке приложений. Поведенческие паттерны. Часть 2.

Tags: programming , программирование , паттерны , patterns

Published 21 февраля 2021 г. 10:11

А вот и долгожданная вторая часть разбора поведенческих паттернов! Между этим и предыдущим постом прошло довольно много времени, но (наконец!) сегодня нашему вниманию предстанут 5 шаблонов:

  1. Наблюдатель (Observer)
  2. Состояние (State)
  3. Стратегия (Strategy)
  4. Шаблонный метод (Template method)
  5. Посетитель (Visitor)

Что ж, пришло время познакомиться с ними поближе.

Наблюдатель

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

Самый распространённый пример - поиск определённого товара в магазине. Согласитесь, было бы весьма утомительно каждый день приходить в магазин и спрашивать о наличии нужного вам товара. А теперь представьте другой сценарий. У магазина есть интернет-рассылка, но она лишь захламляет ваш почтовый ящик, а результат от неё точно такой же, как если бы вы ходили в магазин сами.

Observer позволяет избежать таких трудностей. Уведомление подписчиков происходит только тогда, когда изменяется объект их подписки. Издателю безразлично количество подписчиков, также он не ведёт их журнал (подписчики добавляются и удаляются самостоятельно). 

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

Состояние

Данный паттерн позволяет объектам менять своё поведение в зависимости от их состояний. Чтобы понять принцип работы паттерна, необходимо иметь базовые представления о конечном автомате или так называемой машиной состояний.

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

Паттерн основан на создании отдельных классов для каждого состояния и вынесения поведения, характерного для этих состояний, в эти классы. Ресурсы с кодом код1 и код2.

Стратегия

Шаблон Стратегия позволяет определить семейство схожих алгоритмов и заменять их в ходе выполнения программы.

Например, когда вы сохраняете документ в Word, вам предлагаются различные типы файлов: docx, doc, pdf и т. д. Это и есть наглядное представление работы шаблона стратегия. По сути, алгоритмы сохранения файлов схожи, однако, в зависимости от формата сохраняемого файла, детали этой процедуры могут отличаться. И, конечно же, ресурсы с кодом код1 и код2.

Шаблонный метод

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

Допустим, у вас есть несколько бд, к которым необходимо получить доступ. Алгоритм подключения к любой бд состоит из создания соединения и получения данных. Вместо того, чтобы плодить дублирующий код в каждом подклассе (например для MySql и Postgresql), мы можем вынести общие шаги в отдельный класс, а некоторые особенности (строка-команда для создания соединения) оставить в подклассах. Примеры: код1 и код2.

Посетитель

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

Посетитель спешит на помощь (конечно не такой, как на фото выше :-)). Паттерн позволяет разместить новое поведение в отдельном классе. Классы, которым необходимо добавить новые функции, передают объекты визитёрам. Ресурсы: код1 и код2.

Вот и подошло концу наше путешествие по миру паттернов. Пройдя этот долгий путь, мы разобрали типы паттернов и рассмотрели каждый из них в отдельности. Паттерны позволяют нам найти способ решения многих проблем, возникающих в процессе разработки ПО и в этом их несомненная польза. Однако не стоит злоупотреблять ими, так как они лишь **способ решения**, а не само решение!

И на этой ноте желаю вам попробовать и оценить паттерны проектирования, ну и конечно же, кода без багов!


Похожие публикации

Паттерны в разработке приложений. Поведенческие паттерны. Часть 1.

Паттерны в разработке приложений. Структурные паттерны

Паттерны в разработке приложений. Порождающие паттерны

Паттерны в разработке приложений