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

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

Published 4 февраля 2021 г. 11:46

Продолжаем наше знакомство с паттернами и на очереди у нас - Поведенческие паттерны. Это довольно обширная группа паттернов и рассказать о них в одном посте будет весьма проблематично, так что повесть о них растянется на пару  постов :-). Поехали!

Для начала стоит узнать, что же такое поведенческие паттерны и зачем они нужны. 

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

  1. Цепочка обязанностей (Chain of Responsibility)
  2. Команда (Command)
  3. Итератор (Iterator)
  4. Посредник (Mediator)
  5. Снимок (Memento)
  6. Наблюдатель (Observer)
  7. Состояние (State)
  8. Стратегия (Strategy)
  9. Шаблонный метод (Template method)
  10. Посетитель (Visitor)

В этой статье узнаем подробнее о первой пятёрке.

Цепочка обязанностей

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

Здесь то нам и пригодится паттерн Цепочка обязанностей. Он позволит нам разделить этапы проверки между обработчиками. В случае прохождения этапа проверки, запрос передаётся следующему обработчику и так до конца цепочки. Если же на каком-то этапе обработка прервётся, то дальше проверка просто не пойдёт. Так мы сможем избежать множества условных конструкций в одном методе и в дальнейшем легко добавить дополнительные проверки, если таковые понадобятся. Здесь и здесь представлены ресурсы с кодом и диаграммами.

Команда

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

Паттерн Команда избавит нас от данного времяпровождения :-).  Вместо создания многочисленных классов мы можем создать объект, который будет знать, кому отправлять данный запрос, и привязать объекты интерфейса к данному объекту-команде. Так наши пункты меню и сочетания клавиш отправляют свои запросы не напрямую к получателю, а через объект-команду, что позволяет нам уменьшить связность и добавляет возможность отмены команд с помощью логирования. И, конечно же, ресурсы с кодом: код1код2 и код3.

Итератор

Паттерн Итератор позволяет производить обход элементов составных объектов различными способами.

С помощью паттерна Итератор мы можем вынести поведение обхода нашей коллекции в отдельный класс и задавать методы обхода динамически. Аналогично походу в магазин, вы знаете, какие отделы (элементы) вам нужно посетить, но способ перемещения между ними может отличаться. Ресурсы: код1 и код2.

Посредник

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

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

Снимок

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

На этой интригующей ноте завершим этот пост и двинемся к новым (и весьма полезным) поведенческим паттернам, разобранным во второй части.


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

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

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

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

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