Получить доступ

Что описывают поведенческие паттерны?

JuniorПаттерны проектирования
Ещё спрашивают так:
  • Какие поведенческие паттерны вы знаете?
  • Что такое Strategy и Observer?
Коротко

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

  • Strategy — взаимозаменяемый алгоритм; Observer — уведомление подписчиков; Chain of Responsibility — цепочка обработчиков
  • Ещё: Command, Template Method, State, Iterator, Visitor

А ещё В современной Java многие из них — функциональный интерфейс и лямбда

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Примеры, которые чаще всего обсуждают:

  • Strategy — алгоритм передаётся снаружи и может меняться: Comparator для сортировки, способ расчёта скидки. С лямбдами стратегия — одна строка вместо иерархии классов;
  • Observer — объект уведомляет подписчиков об изменениях: слушатели событий, ApplicationEventPublisher в Spring, реактивные потоки;
  • Chain of Responsibility — запрос проходит по цепочке обработчиков, каждый решает, обработать или передать дальше: фильтры сервлетов, цепочка фильтров Spring Security;
  • Command — запрос упакован в объект: очереди задач, отмена действий, Runnable;
  • Template Method — каркас алгоритма в базовом классе, шаги переопределяют наследники;
  • State — поведение зависит от состояния, каждое состояние — отдельный класс;
  • Iterator — обход коллекции без раскрытия устройства.

Современный контекст: часть паттернов в Java заметно упростилась — Strategy, Command, Observer часто выражаются функциональным интерфейсом и лямбдой.

Пример

interface DiscountPolicy { BigDecimal apply(BigDecimal price); }   // Strategy

DiscountPolicy none = p -> p;
DiscountPolicy blackFriday = p -> p.multiply(new BigDecimal("0.7"));

BigDecimal total = blackFriday.apply(cartTotal);

Что хотят услышать

  • Назначение группы.
  • Несколько паттернов с примерами из практики.
  • Связь с лямбдами в современной Java — плюс.

Частые ошибки

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

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Как объекты распределяют обязанности и взаимодействуют между собой
  • ✗Как объекты создаются и инициализируются
  • ✗Как объекты размещаются в памяти
  • ✗Как классы наследуют друг друга

Что спросят дальше

  • Какой паттерн представляет интерфейс сравнения объектов?
  • Как лямбды упростили часть этих паттернов?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем