Design Patterns : Elements of Reusable Object-Oriented Software


Design Patterns: Elements of Reusable Object-Oriented Software



Download 4,06 Mb.
Pdf ko'rish
bet156/288
Sana07.04.2022
Hajmi4,06 Mb.
#535140
1   ...   152   153   154   155   156   157   158   159   ...   288
Bog'liq
GOF Design Patterns

Design Patterns: Elements of Reusable Object-Oriented Software 
225 
virtual void Next(GlyphContext&); 
virtual bool IsDone(GlyphContext&); 
virtual Glyph* Current(GlyphContext&); 
virtual void Insert(Glyph*, GlyphContext&); 
virtual void Remove(GlyphContext&); 
protected: 
Glyph(); 
}; 
The Character subclass just stores a character code:
class Character : public Glyph { 
public: 
Character(char); 
virtual void Draw(Window*, GlyphContext&); 
private: 
char _charcode; 
}; 
To keep from allocating space for a font attribute in every glyph, we'll store 
the attribute extrinsically in a GlyphContext object. GlyphContext acts as a 
repository of extrinsic state. It maintains a compact mapping between a glyph 
and its font (and any other graphical attributes it might have) in different 
contexts. Any operation that needs to know the glyph's font in a given context 
will have a GlyphContext instance passed to it as a parameter. The operation can 
then query the GlyphContext for the font in that context. The context depends 
on the glyph's location in the glyph structure. Therefore Glyph's child iteration 
and manipulation operations must update the GlyphContext whenever they're used. 
class GlyphContext { 
public: 
GlyphContext(); 
virtual ~GlyphContext(); 
virtual void Next(int step = 1); 
virtual void Insert(int quantity = 1); 
virtual Font* GetFont(); 
virtual void SetFont(Font*, int span = 1); 
private: 


Design Patterns: Elements of Reusable Object-Oriented Software 
226 
int _index; 
BTree* _fonts; 
}; 
GlyphContext must be kept informed of the current position in the glyph structure 
during traversal. GlyphContext::Next increments _index as the traversal proceeds. 
Glyph subclasses that have children (e.g., Row and Column) must implement Next 
so that it calls GlyphContext::Next at each point in the traversal. 
GlyphContext::GetFont uses the index as a key into a BTree structure that stores 
the glyph-to-font mapping. Each node in the tree is labeled with the length of 
the string for which it gives font information. Leaves in the tree point to a 
font, while interior nodes break the string into substrings, one for each child. 
Consider the following excerpt from a glyph composition: 
The BTree structure for font information might look like 



Download 4,06 Mb.

Do'stlaringiz bilan baham:
1   ...   152   153   154   155   156   157   158   159   ...   288




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