Паттерн Visitor относится к поведенческим паттернам уровня объекта.
Паттерн Visitor позволяет обойти набор элементов (объектов) с разнородными интерфейсами, а также позволяет добавить новый метод в класс объекта, при этом, не изменяя сам класс этого объекта.
Требуется для реализации:
- Абстрактный класс Visitor, описывающий интерфейс визитера;
- Класс ConcreteVisitor, реализующий конкретного визитера. Реализует методы для обхода конкретного элемента;
- Класс ObjectStructure, реализующий структуру(коллекцию), в которой хранятся элементы для обхода;
- Абстрактный класс Element, реализующий интерфейс элементов структуры;
- Класс ElementA, реализующий элемент структуры;
- Класс ElementB, реализующий элемент структуры.
[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Экземпляр этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.