Erich Gamma Ralph Johnson Richard Helm John Vlissides Addison-Wesley



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

Паттерны поведения
InventoryVisitor к структуре объектов можно применить следующим об-
разом:
Equipment* component;
InventoryVisitor visitor;
component->Accept(visitor);
cout « "Инвентарная опись "
« component->Name()
« visitor.Getlnventory();
Далее мы покажем, как на языке Smalltalk реализовать пример из описания
паттерна интерпретатор с помощью паттерна посетитель. Как и в предыдущем
случае, этот пример настолько мал, что паттерн посетитель практически беспо-
лезен, но служит неплохой иллюстрацией основных принципов. Кроме того, де-
монстрируется ситуация, в которой обход выполняет посетитель.
Структура объектов (регулярные выражения) представлена четырьмя класса-
ми, в каждом из которых существует метод accept:, принимающий посетитель
в качестве аргумента. В классе SequenceExpression метод accept: выглядит так:
accept: aVisitor
^ aVisitor visitSequence: self
Метод accept: в классах RepeatExpression, AlternationExpression
и LiteralExpression посылает сообщения visitRepeat:, visitAlternation:
и visitLiteral: соответственно.
Все четыре класса должны иметь функции доступа, к которым может обратить-
ся посетитель. Для SequenceExpression это expression! иехргезз!оп2;для
AlternationExpression- alternative! и alternative2; для класса
RepeatExpression -repetition,а дляLiteralExpression -components.
Конкретным посетителем выступает класс REMatchingVisitor. Он отвеча-
ет за обход структуры, поскольку алгоритм обхода нерегулярен. В основном это
происходит из-за того, что RepeatExpression посещает свой компонент много-
кратно. В классе REMatchingVisitor есть переменная экземпляра inputstate.
Его методы практически повторяют методы match: классов выражений из пат-
терна интерпретатор, только вместо аргумента inputstate подставляется узел,
описывающий сравниваемое выражение. Однако они по-прежнему возвращают
множество потоков, с которыми выражение должно сопоставиться, чтобы полу-
чить текущее состояние:
visitSequence: sequenceExp
inputstate := sequenceExp expressionl accept: self.
^ sequenceExp expression2 accept: self.
visitRepeat: repeatExp
I finalState I
finalState := inputstate copy,
[inputstate isEmpty]


Паттерн Visitor
whileFalse:
[inputState := repeatExp repetition accept: self.
finalState addAll: inputState].
^ finalState
VisitAlternation: alternateExp
I finalState originalState I
originalState := inputState.
finalState := alternateExp alternativel accept: self.
inputState := originalState.
finalState addAll: (alternateExp alternative2 accept: self).
^ finalState
visitLiteral: literalExp
I finalState tStream I
finalState := Set new.
inputState
do:
[:stream I tStream := stream copy.
(tStream nextAvailable:
literalExp components size
) = literalExp components
ifTrue: [finalState add: tStream]
].
^ finalState

Download 6,32 Mb.

Do'stlaringiz bilan baham:
1   ...   254   255   256   257   258   259   260   261   ...   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