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

Зачем нужен паттерн Visitor, какова его цена и чем его можно заменить в современной Java?

SeniorПаттерны проектированияJava >=21
Коротко

Visitor выносит операции за пределы иерархии: удобно, когда типы стабильны, а операций много. Цена — асимметрия: новая операция дешёвая, новый тип требует править всех визиторов. В Java 21 его заменяет sealed-иерархия + switch с pattern matching — компилятор сам проверит полноту.

  • Примеры: обход AST, FileVisitor в NIO
  • Двойная диспетчеризация: accept вызывает visit с конкретным типом
  • switch по sealed не требует accept-методов в классах

А ещё Новый тип в sealed-иерархии — компилятор укажет все незакрытые switch

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

Подробно

Объясни задачу: если операций много, а иерархия стабильна, держать каждую операцию методом в каждом классе неудобно — визитор выносит их наружу. Обязательно назови асимметрию: добавление операции дешёвое, добавление типа дорогое, потому что править придётся всех визиторов. Приведи примеры из платформы (FileVisitor, ElementVisitor) и заверши современной альтернативой: sealed-иерархия закрывает набор наследников, switch с pattern matching становится исчерпывающим, и компилятор сам укажет все места, требующие правки. Это тот же контроль полноты, что давал визитор, но без ритуала accept/visit.

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

  • Задача паттерна.
  • Асимметрия расширения.
  • Современная замена.

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

  • Забывать про асимметрию цены и подавать визитор как безусловно гибкое решение.
  • Не замечать, что sealed-типы сознательно жертвуют OCP ради исчерпываемости.

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

  • Что такое двойная диспетчеризация?
  • Как sealed-типы меняют компромисс с OCP?

Разбор темы

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

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

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

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

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