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