Шаблон команды против шаблона посетителя - PullRequest
7 голосов
/ 18 мая 2010

Обычно допустимо, чтобы Посетитель мог изменять состояние Получателя, или вместо этого это должен быть шаблон Команды?

Ответы [ 4 ]

5 голосов
/ 18 мая 2010

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

2 голосов
/ 18 мая 2010

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

1 голос
/ 15 февраля 2016

Каждый шаблон имеет свои плюсы, минусы и варианты использования.

Вы можете использовать Command шаблон для

  1. Отделение Призыватель и получатель команды

  2. Реализация обратный вызов механизм

  3. Реализация отмена и повтор функциональность

  4. Ведение истории команд

Используйте шаблон Visitor в следующих сценариях:

  1. Аналогичные операции должны быть выполнены для объектов разных типов, сгруппированных в структуре
  2. Вам нужно выполнить много разных и не связанных операций. Он отделяет Операция от объектов Структура
  3. Новые операции должны быть добавлены без изменений в структуре объекта

Похожие сообщения:

Использование шаблона проектирования команд

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

1 голос
/ 21 июля 2011

Пример того, как посетитель модифицирует получателя, - ExpressionVisitor . Целью класса ExpressionVisitor является изменение дерева выражений. Поэтому я думаю, что Microsoft, по крайней мере, считает это приемлемым.

...