В моем приложении CAD/CAM у меня есть пути и коллекции путей (PathList). Иногда мне приходится создавать коллекцию фигур.Я не только должен генерировать эту конкретную коллекцию форм, я должен включить ее в другую коллекцию фигур. Мне часто требуется дюжина или более параметров для передачи всей информации, необходимой для проведения расчетов.
Все вычисления формы (простые или сложные) в моем CAM направляют PathList, который отправляется на разные машины.
С этой конструкцией лучше всего иметь некоторую настройку, которая включает в себя добавление результата в одну коллекцию.
The Path Visitor подходит для этого красиво. Каждое вычисление формы инкапсулируется в собственный класс с такими сложными свойствами, как необходимые.
Так вытяжкой посетитель может было 8 фигур в Pathlist
Хотя Кухня Счетчик посетителей добавляет 6 формы.
Ящик Посетитель добавляет еще несколько.
Затем я передаю полученный PathList остальной системе, как любой другой генератор формы.
У меня легко есть варианты, добавив другого посетителя или не запустив некоторые. Для парня, который хочет только счетчик и ящики, мне нужно всего лишь запустить двух посетителей.
Полученный код очень читабельен, что важно, когда я пересматриваю эту область на 3, 5 или 10 лет по линии. Кроме того, из-за инкапсуляции изменения к одному посетителю имеют минимальное влияние на других посетителей.
Кроме того, теперь у меня есть стандартизованный шаблон проектирования, чтобы добавить любые новые функции в PathList, реализовав шаблон посетителя.
Например, когда-то наш редактор свойств работал только по одному пути. Когда мы перешли на редактирование нескольких путей, было легко реализовать пользовательских посетителей для глобальных изменений ко всем путям. Это было более читаемо, а затем использовалось для циклов внутри делегатов.
Но в конечном счете это сводится к суждению и предпочтению.
См. Также http://stackoverflow.com/questions/255214/when-should-i-use-the-visitor-design-pattern – 2008-12-12 01:26:44