ункцию visit(). Итак, возникае

Автор admin Понедельник, 22 июня 2009 11:32

ункцию visit(). Итак, возникает следующая дилемма: вы хотите добавить в базовый класс новые функции, но по каким-то причинам не можете изменять его. Как обойти это препятствие? Паттерн Посетитель строится по рассмотренной в начале этого разделе схеме с двойной диспетчеризацией. Он позволяет эффективно расширять интерфейс основного типа посредством создания отдельной иерархии классов типа Visitor для «виртуализации» операций, выполняемых с основным типом. Объекты основного типа просто «принимают» посетителя, а затем вызывают функции посетителя через механизм динамического связывания. Проще говоря, вы создаете посетителя, передаете его основной иерархии и получаете эффект виртуальной функции. Простой пример: //: C10:BeeAndFlowers.cpp // Паттерн Посетитель. #include #include #include #i nclude #i nclude #include linclude “../purge.h” using namespace std: class Gladiolus: class Renuculus: class Chrysanthemum: class Visitor { public: virtual void visit(Gladiolus* f) = 0: virtual void visit(Renuculus* f) = 0: 526 Глава 10 • Паттерны проектирования v


Комментарии закрыты.