TGViewer
Разработка с Дарьей Матвеевой Разработка с Дарьей Матвеевой @system_design_explained · 72 subscribers
Post #59 203
В книге Head First "Паттерны Проектирования" не рассказывается про один из известных паттернов - Visitor (Посетитель). Он используется, когда мы хотим добавить новое поведение классам из иерархии, но не хотим сильно править сами классы.

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

Для нас может быть нежелательно создавать новые методы в иерархии. Например, наши классы удачно спроектированы, покрыты тестами и мы не хотим ничего сломать.
К тому же, при внесении новых методов может нарушаться Single Responsibility Principle. Мы хотим сконцентрировать в классах код, который описывает занятие конкретным видом спорта, а нормативы - это просто побочная рутина спортсмена. К тому же вполне возможно что нормативы будут меняться, и каждый раз придется править классы иерархии.
С помощью Посетителя мы можем отделить новое поведение от данных.

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

Пост с примерами кода:
https://dmatveeva.github.io/visitor-default-method/
  • 👍 2
More from @system_design_explained
  1. Sep 22, 2026Нашла способ, который мгновенно и без дополнительных усилий увеличил мою продуктивность пр…
  2. Mar 27, 2026Я в ВК : https://vk.ru/dev_with_dm
  3. Mar 27, 2026Читаю в последнее время много критики микросервисов, и у меня тоже есть пример, как раз за…
  4. Mar 4, 2026В функциональных языках рекомендуется делать все объекты immutable, и, хотя на работе я пи…
  5. Dec 4, 2025Недавно занималась задачей, где нужно было реализовать оптимистическую блокировку сущности…
  6. Nov 21, 2025Обнаружила еще один плюс TDD. Согласно подходу, я пишу тест, который падает, пишу код, что…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →