Паттерн «Посетитель» (Visitor) является эффективным в следующих случаях:
- В структуре присутствуют объекты многих классов с различными интерфейсами, и над ними нужно совершать операции, зависящие от конкретных классов. codelab.ru
- Над объектами, входящими в состав структуры, надо выполнять разнообразные, не связанные между собой операции, и не хочется «засорять» классы такими операциями. codelab.ru В этом случае паттерн позволяет объединить родственные операции, поместив их в один класс. codelab.ru
- Если структура объектов является общей для нескольких приложений, то паттерн посетитель позволит в каждое приложение включить только относящиеся к нему операции. codelab.ru
- Классы, устанавливающие структуру объектов, изменяются редко, но новые операции над этой структурой добавляются часто. codelab.ru В таких случаях паттерн помогает лучше управлять изменениями. codelab.ru
Однако стоит учитывать, что при использовании паттерна «Посетитель» затруднено добавление новых классов, поскольку нужно обновлять иерархию посетителя и его подклассов. ru.wikipedia.org Поэтому если новые классы добавляются часто, то, вероятно, проще определить операции прямо в классах, представленных в структуре. codelab.ru