Erich Gamma Ralph Johnson Richard Helm John Vlissides Addison-Wesley



Download 6,32 Mb.
Pdf ko'rish
bet256/273
Sana02.03.2022
Hajmi6,32 Mb.
#479589
1   ...   252   253   254   255   256   257   258   259   ...   273
Bog'liq
Priemioop

Паттерн Visitor
в качестве аргумента, а не операцию
 элемента с посетителем
в качестве аргу-
мента. Однако использовать паттерн посетитель с внутренним итератором
легко в том случае, когда операция посетителя вызывает операцию элемен-
та без рекурсии.
Можно даже поместить алгоритм обхода в посетитель, хотя закончится это
дублированием кода обхода в каждом классе ConcreteVisitor для каж-
дого агрегата ConcreteElement. Основная причина такого решения - не-
обходимость реализовать особо сложную стратегию обхода, зависящую от
результатов операций над объектами структуры. Этот случай рассматрива-
ется в разделе «Пример кода».
Пример кода
Поскольку посетители обычно ассоциируются с составными объектами, то для
иллюстрации паттерна посетитель мы воспользуемся классами Equipment, оп-
ределенными в разделе «Пример кода» из описания паттерна компоновщик. Для
определения операций, создающих инвентарную опись материалов и вычисляю-
щих полную стоимость агрегата, нам понадобится паттерн посетитель. Классы
Equipment настолько просты, что применять паттерн посетитель в общем-то из-
лишне, но на этом примере демонстрируются основные особенности его реализации.
Приведем еще раз объявление класса Equipment из описания паттерна ком-
поновщик. Мы добавили операцию Accept, чтобы можно было работать с посе-
тителем:
class Equipment {
public:
virtual -Equipment ( ) ;
const char* Name() { return _name; }
virtual Watt Power ();
virtual Currency NetPriceO;
virtual Currency DiscountPrice ( ) ;
virtual void Accept (Equipment Visitors) ;
protected:
Equipment (const char*);
private:
const char* _name;
class Equipment {
public:
virtual -Equipment() ;
const char* Name() { return _name; }
virtual Watt Power();
virtual Currency NetPrice();
virtual Currency DiscountPrice();
virtual void Accept(EquipmentVisitors);
protected:
Equipment(const char*);
private:
const char* _name;
};
Операции класса Equipment возвращают такие атрибуты единицы оборудо-
вания, как энергопотребление и стоимость. В подклассах эти операции переопре-
делены в соответствии с конкретными типами оборудования (рама, дисководы
и электронные платы).
В абстрактном классе всех посетителей оборудования имеются виртуальные
функции для каждого подкласса (см. ниже). По умолчанию эти функции ничего
не делают:



Download 6,32 Mb.

Do'stlaringiz bilan baham:
1   ...   252   253   254   255   256   257   258   259   ...   273




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish