Відвідувач — це поведінковий патерн, який дозволяє додати нову операцію для цілої ієрархії класів, не змінюючи код цих класів.
Детальніше про те, чому Відвідувач не можна замінити звичайним перевантаженням методів читайте в статті Відвідувач і 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: Результат виконання