Что такое шаблон проектирования посетителя?

Представляют операцию, которая должна выполняться над элементами структуры объекта.

Посетитель позволяет определить новую операцию без изменения классов элементов, над которыми она работает.

Чтобы лучше понять приведенное выше объяснение, посмотрите на следующую диаграмму.

Левая сторона представляет объекты посетителей, а правая сторона представляет структуру объекта.

Структура объекта может быть коллекцией типа Array, List, ArrayList и т. д. Как вы можете видеть, она может иметь несколько элементов (т. е. Элемент 1, Элемент 2, Элемент 3 и Элемент 4). Теперь, если вы хотите выполнить какую-то общую операцию над каждым элементом, вам нужно использовать шаблон проектирования посетителя.

Здесь объект Посетитель будет посещать каждый элемент структуры объекта и выполнять общую операцию.

Теперь можно изменять операцию по мере изменения посетителя. Например, для посетителя 1 вы можете выполнить операцию A для каждого элемента, тогда как для посетителя 2 вы можете выполнить операцию B для каждого элемента.

Диаграмма классов шаблона проектирования посетителей:

Понимание шаблона проектирования посетителей на примере:

Предположим, у нас есть компания, и у этой компании есть список сотрудников, и мы хотим разработать программу, которая позволяет нам изменять зарплату или отпуск всего списка сотрудников. мы будем использовать шаблон проектирования посетителей для реализации этой программы.
в нашем примере у нас есть два посетителя, один для зарплаты, а другой для отпуска, а нашей структурой объекта является список сотрудников.

Реализация:

Ссылка на полный код на Github:

BehavioralDesignPatterns/07-VisitorDP

Преимущество шаблона проектирования «Посетитель»

1- Позволяет добавлять операции в структуру объекта без изменения самой структуры
.

2. Сделайте основные классы вашего приложения более сосредоточенными на своей основной работе, извлекая все остальные варианты поведения в набор классов посетителей.

Когда использовать шаблон проектирования посетителей?

Когда нужно выполнить операцию над всеми элементами сложной объектной структуры.