Посетитель — это поведенческий паттерн, который позволяет добавить новую операцию для целой иерархии классов, не изменяя код этих классов.
Подробней о том, почему Посетитель нельзя заменить простой перегрузкой методов читайте в статье Посетитель и Double Dispatch.
Сложность:
Популярность:
Применимость: Посетитель нечасто встречается в Java-коде из-за своей сложности и нюансов реализазации.
Примеры Посетителей в стандартных библиотеках Java:
Сериализация объектов в XML
В нашем примере классы геометрических фигур не могут сами экспортировать своё состояние в XML. Представьте, что у вас нет доступа к их коду.
Однако с помощью Посетителя мы можем прикрутить любое поведение к этой иерархии (с оговоркой, что в ней будет реализован метод accept
).
shapes
shapes/Shape.java: Общий интерфейс фигур
shapes/Dot.java: Точка
shapes/Circle.java: Круг
shapes/Rectangle.java: Четырёхугольник
shapes/CompoundShape.java: Составная фигура
visitor
visitor/Visitor.java: Интерфейс посетителя
visitor/XMLExportVisitor.java: Конкретный посетитель
Demo.java: Клиентский код
OutputDemo.txt: Результат выполнения