Erich Gamma Ralph Johnson Richard Helm John Vlissides Addison-Wesley



Download 6,32 Mb.
Pdf ko'rish
bet244/273
Sana02.03.2022
Hajmi6,32 Mb.
#479589
1   ...   240   241   242   243   244   245   246   247   ...   273
Bog'liq
Priemioop

Паттерн Strategy
// подготовить массивы с характеристиками компонентов
// ...
// определить, где должны быть точки разрыва
int breakCount;
breakCount = _compositor->Compose(
natural, stretchability, shrinkability,
componentCount, _lineWidth, breaks
);
// разместить компоненты с учетом точек разрыва
// ...
}
Теперь рассмотрим подклассы класса Compositor. Класс SimpleCompositor
для определения позиций точек разрыва исследует компоненты по одному:
class SimpleCompositor : public Compositor {
public:
SimpleCompositor();
virtual int Compose(
Coord natural[], Coord stretch[], Coord shrink[],
int componentCount, int lineWidth, int breaks[]
);
// ...
};
Класс TeXCompositor использует более глобальную стратегию. Он рассмат-
ривает
 абзац
целиком, принимая во внимание размеры и растягиваемость компо-
нентов. Данный класс также пытается равномерно «раскрасить» абзац, миними-
зируя ширину пропусков между компонентами:
class TeXCompositor : public Compositor {
public:
TeXCompositor();
virtual int Compose(
Coord natural[], Coord stretch[]. Coord shrink[],
int componentCount, int lineWidth, int breaks[]
) ;
// ...
};
Класс ArrayCompositor разбивает компоненты на строки, оставляя между
ними равные промежутки:
class ArrayCompositor : public Compositor {
public:
ArrayCompositor(int interval);


Паттерны поведения
virtual int Compose(
Coord natural!], Coord stretch!], Coord shrink!],
int componentCount, int lineWidth, int breaks[]
);
// ...
};
He все из этих классов используют в полном объеме информацию, переданную
операции Compose. SimpleComposiLor игнорирует растягиваемость компонен-
тов, принимая во внимание только их естественную ширину. TeXCompositor ис-
пользует всю переданную информацию, a ArrayCompositor игнорирует ее.
При создании экземпляра класса Composition вы передаете ему компонов-
щик, которым собираетесь пользоваться:
Composition* quick = new Composition (new SimpleCompositor) ;
Composition* slick = new Composition (new TeXCompositor);
Composition* iconic = new Composition (new ArrayCompositor (100) );
Интерфейс класса Compositor тщательно спроектирован для поддержки всех
алгоритмов размещения, которые могут быть реализованы в подклассах. Вряд ли
вам захочется изменять данный интерфейс при появлении каждого нового под-
класса, поскольку это означало бы переписывание уже существующих подклассов.
В общем случае именно интерфейсы классов Strategy и Context определяют, на-
сколько хорошо паттерн стратегия соответствует своему назначению.

Download 6,32 Mb.

Do'stlaringiz bilan baham:
1   ...   240   241   242   243   244   245   246   247   ...   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