В книге Head First "Паттерны Проектирования" не рассказывается про один из известных паттернов - Visitor (Посетитель). Он используется, когда мы хотим добавить новое поведение классам из иерархии, но не хотим сильно править сами классы.
Допустим у нас в проекте есть иерархия спортсменов различного уровня. Поступило требование, чтобы каждый спортсмен сдавал норматив по отжиманиям и подтягиваниям.
Для нас может быть нежелательно создавать новые методы в иерархии. Например, наши классы удачно спроектированы, покрыты тестами и мы не хотим ничего сломать.
К тому же, при внесении новых методов может нарушаться Single Responsibility Principle. Мы хотим сконцентрировать в классах код, который описывает занятие конкретным видом спорта, а нормативы - это просто побочная рутина спортсмена. К тому же вполне возможно что нормативы будут меняться, и каждый раз придется править классы иерархии.
С помощью Посетителя мы можем отделить новое поведение от данных.
А еще это можно сделать, используя дефолтные методы интерфейсов в Java.
Дефолтные методы - это реализация концепции примеси.
Примесь (mix in) - элемент языка программирования, реализующий выделенное поведение. Позволяет дополнить классы новым поведением, без необходимости наследовать класс от данного элемента.
Пост с примерами кода:
https://dmatveeva.github.io/visitor-default-method/
Post #59
203

- 👍 2