Назад

ⓘ Энциклопедия | Посетитель, шаблон проектирования - Вики ..



Бесплатно и без рекламы
не нужно скачивать или устанавливать

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

интеллектуальная игра онлайн →
Посетитель (шаблон проектирования)
                                     

ⓘ Посетитель (шаблон проектирования)

Посетитель - поведенческий шаблон проектирования, описывающий операцию, которая выполняется над объектами других классов. При изменении visitor нет необходимости изменять обслуживаемые классы.

Шаблон демонстрирует классический приём восстановления информации о потерянных типах, не прибегая к понижающему приведению типов при помощи двойной диспетчеризации.

                                     

1. Решаемая проблема

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

Задача

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

Решение

Для независимости посетитель имеет отдельную иерархию. Структуры имеют некий интерфейс взаимодействия.

                                     

2. Использование

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

Создается базовый класс Visitor с методами visit для каждого подкласса родительского Element. Добавьте метод acceptvisitor в иерархию Element. Для каждой операции, которая должна выполняться для объектов Element, создайте производный от Visitor класс. Реализации метода visit должны использовать открытый интерфейс класса Element. В результате: клиенты создают объекты Visitor и передают их каждому объекту Element, вызывая accept.

                                     

3. Рекомендации

Шаблон следует использовать, если:

  • имеются различные объекты разных классов с разными интерфейсами, но над ними нужно совершать операции, зависящие от конкретных классов;
  • часто добавляются новые операции над структурой.
  • необходимо над структурой выполнить различные, усложняющие структуру операции;
                                     

4. Преимущества и недостатки

Преимущества:

  • упрощается добавление новых операций;
  • класс Visitor может запоминать в себе какое-то состояние по мере обхода контейнера.
  • объединение родственных операции в классе Visitor ;

Недостатки:

  • затруднено добавление новых классов, поскольку нужно обновлять иерархию посетителя и его сыновей.
                                     

5. Реализация

  • Клиент создаёт объект Visitor и передаёт его в вызываемый метод accept.
  • Создайте базовый класс Visitor и определите методы visit для каждого типа элемента.
  • Создайте производные классы Visitor для каждой операции, исполняемой над элементами.
  • Добавьте метод acceptVisitor в иерархию "элемент".

Пользователи также искали:

...
Бесплатно и без рекламы
не нужно скачивать или устанавливать

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

интеллектуальная игра онлайн →