Действительно ли обычно приемлемо позволить Посетителю изменять состояние Получателя, или это должно быть Шаблоном "команда" вместо этого?
Цель паттерна посетителя - позволить добавлять новые операции в иерархию классов без модификации этой иерархии. Я никогда не видел, чтобы кто-то предлагал, что допустимы только операции только для чтения. Единственным ограничением является то, что добавленные операции должны использовать только публичный интерфейс наследницы классов.
Я не думаю, что вы можете сделать однозначное заявление о том, хорошо или плохо изменять состояние чего-либо. Я думаю, что можно изменять состояния, если это не влияет на саму логику посещения. Например, вы можете написать посетителя, который посещает все файлы в структуре папок и переименовывает имя файла в верхний регистр.