Командный шаблон против шаблона посетителей
-
27-09-2019 - |
Вопрос
Обычно это приемлемо, чтобы позволить посетителю модифицировать состояние приемника или должен быть вместо этого командный шаблон?
Решение
Целью шаблона посетителя является допущение добавления новых операций в классную наследственность без модификации к этой наследстве. Я никогда не видел никого, предполагаю, что только операции только для чтения приемлемы. Единственным ограничением является то, что добавленные операции должны использовать только общедоступный интерфейс класса Heirarchy.
Другие советы
Я не думаю, что вы можете сделать одеяло-заявление, хорошо ли это хорошо или плохо изменить состояние чего-либо. Я бы подумал, что это нормально изменить состояния, если это не влияет на саму посещающую логику. Например, вы можете написать посетитель, который посещает все файлы под структурой папки и переименовывает имя файла в верхний регистр.
Пример Microsoft посетителей, модифицирующий приемник, является ExpressionVisitor. Отказ Целью класса ExpressionVisitor является изменение дерева выражения. Так что я думаю, что Microsoft по крайней мере считает, что это приемлемо.
Каждый узор имеет свои собственные плюсы, минусы и использование случаев.
Ты можешь использовать Command
шаблон
Отделение invoxer & Reisever of command
Воплощать в жизнь перезвонить механизм
Воплощать в жизнь отменить и повторить Функциональность
Поддерживать а История команд
Использовать Visitor
Узор в следующих сценариях:
- Аналогичные операции должны быть выполнены на объектах разных типов, сгруппированных в структуре
- Вам необходимо выполнить много различных и несвязанных операций. Это отделяет Эксплуатация от объектов Структура
- Новые операции должны быть добавлены без изменения структуры объекта
Похожие сообщения: