Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Patterns2015

.pdf
Скачиваний:
10
Добавлен:
14.02.2015
Размер:
42.45 Mб
Скачать

«О бработканажатийклавиш»

class KeyHandler { protected:

KeyHandler *successor; public:

KeyHandler(){successor = NULL;} KeyHandler(KeyHandler* h) { successor = h; } ~KeyHandler();

virtual void handleKey(int key) = 0;

};

class KeyEnter : public KeyHandler { public:

KeyEnter(){}

KeyEnter(KeyHandler* h) : KeyHandler(h) { } void handleKey(int key) {

if (key == 13)

cout << "Pressed \"Enter\"" << endl; else

if(successor != NULL) successor->handleKey(key);

}

};

class KeySpace : public KeyHandler { public:

KeySpace(){}

KeySpace(KeyHandler* h) : KeyHandler(h) { } void handleKey(int key) {

if (key == 32)

cout << "Pressed \"Space\"" << endl; else

if(successor != NULL) successor->handleKey(key);

}

};

class KeyEsc : public KeyHandler { public:

KeyEsc(){}

KeyEsc(KeyHandler* h) : KeyHandler(h) { } void handleKey(int key) {

if (key == 27)

cout << "Pressed \"Esc\"" << endl; else

if(successor != NULL) successor->handleKey(key);

91

}

};

int main(int argc, char *argv[]) { // создали цепочку:

KeyEnter *kEnter = new KeyEnter(); KeySpace *kSpace = new KeySpace(kEnter); KeyEsc *kEsc = new KeyEsc(kSpace);

do{ kEsc->handleKey(getch());

} while(true);

return 0;

}

 

Преимущества

 

Возможностьдинамическогодобавновыхэлецепочкиментовния

. Каждыйэлемент

отвечает олькозаоднуобязаиненодругихаетность

.

Преимущество-недостаток

 

Еслиообщениенеобработаоднимобъектом, исчезаетновконцецепочки

.

Классприменениечское

 

Обрасовбсистемеыо каий

.

6Посредник.8 ( Mediator)

Проблема

Вполучившей структурепроектамногосвязеймеждубъектами.Необходимообеспечить взаимодействие мнобъектовжества ,сформировавприэтомслабуюсвязанностьизбавив объектыотнеобходимостиявноссылдругдруга.ться

Решение

Создатьобъект

, инкапсулирующийспос

обвзаимнодейбъектовже. ствияа

Результат

УстраняетсясвязанностьмеждуКоллегами" ",централизуетсяуправление.

Изменениесвязей

92

Диаграммаклассов

6.9 Стратегия(

Strategy)

 

Проблема

 

 

Спроектироватьвзаимознадежлгормеилинстрыеятмымые

атегии.позволяющие,

выпмолнятьдификациюалгоритмбезмененийнастклиентаовроне

.

Решение

Опредедлякаждгоритмал стратегиитьлиотдельныйкласссостандартным интерфейсом.

93

class Strategy { public:

Strategy(void){}

~Strategy(void){}

virtual void sort(vector<int> &arr) = 0;

};

class Bubble_Sort_Strategy: public Strategy { public:

Bubble_Sort_Strategy(){} ~Bubble_Sort_Strategy(){} void sort(vector<int> &arr) {

int tmp;

for(vector<int>::iterator i = arr.begin(); i != arr.end(); i++) for(vector<int>::iterator j = i+1; j != arr.end(); j++)

if ( (*i) < (*j)) { tmp = *I; *i = *j; *j=tmp; }

}

};

class Context { protected:

Strategy* operation; public:

Context(void){}

~Context(void){}

virtual void UseStrategy(vector<int> &arr) = 0; virtual void SetStrategy(Strategy* v) = 0;

};

class Client: public Context { public:

Client(void){}

~Client(void){}

void UseStrategy(vector<int> &arr) { operation->sort(arr);

}

void SetStrategy(Strategy* o) { operation = o; }

};

94

int main(int argc, char *argv[]) { vector<int> data(10); <Создаем массив>

Client *client = new Client(); Bubble_Sort_Strategy *bubl_sort =

new Bubble_Sort_Strategy(); client->SetStrategy(bubl_sort); client->UseStrategy(data);

for(vector<int>::iterator i = data.begin(); i != data.end(); i++) cout << *i << " “;

cout << endl; return 0;

}

 

Преимущества

 

• Можноизбавитьсяотусловноператорпривыборенужногоховедения

.

• Инкапсуляциякаждалгвоготдельныйритмакласспо

зволяизмегонезависимонять.

Недостатки

 

• Клиентдолжензнатьвсехтратег,ихпреинедостаткахмуществахях,чтобы

 

квалифицивыбратьнужнуюст ованноатегию

.

• Алгоритмынельзязамединитьамически

.

6.10 Интерпретатор(

Interpreter)

 

Проблема

 

 

Имеевстречающаясячас о,

подверженизменениаям

задача,котмобытьраяжет

промодввидекулиграмматикисивова. ной

 

 

Решение

 

 

Создатьинтерпрет,которыйрешданнуюзадачуеттор.

 

 

95

6.11 Шаблонныйметод(

Template Method)

 

Проблема

 

 

Определреализоватьалгори итвозможпереопределенияостьекото

рыхшагов

алгоритмадляподклбез( мененияобщейсструктурыовалгоритма

 

).

Решение

"АбстрактныйКл"определяабстрактныеОп(),замещаемыевцииссконкретных подклдляреашссахлизациилгоргов,реализуетШаблонныйМетодтма(), опредескел" яющий ет"алгоритма.Конк" "релизуететныйКлассОперации(),выполняющие шагиалгоритмаспособ,которыйзависитподклассам.КонкретныйКл" "предполаг, аетсс чтоинвариантныешагиалгоритмабудутвыполненыАбстрактномКлассе" ".

6.12 Контроллер( Controller)

Обязанносистемныхпообработкесообщд лспецигируютсянийкл.альномуссу Контроллер - этообъект,которыйотвечаетзаобработкусистемныхсобытийнеотносится кинтерфейсупользоват.Контроопрметодыллереляетвыполнсистемныхния операций.

6.13 Искусственный (Pure Fabrication)

 

Присвоитьгруппуобязанностейвысокойстепеньюзацепленияклассу,которыйне

 

представлконкретнпонизпредметнойятияоблассинтезироватьго( искусственную

 

сущностьдляобеспечениявысокогозацепления

слабогосвязывания).

96

Даннымпаттерннеследуетзлоупотреблятьм

, иначевсефункциисистпревмывратятся

объекты.

 

6.14 Неразговаривайтеснеизвестными(

Don't talk to strangers)

Обеспечитьсвязьклиентсобъекпрямымиобътаоготое(ксизветамиь

стными

другимобъектам,несамомуклиенту)Обеспечивает. устойчивостьсистемыкизменению

 

структурыобьектов.

 

Необходимоизбегатьпрорешенийктных,предпередачуолагсообщенийющих

 

удалнепрямыминнымиобъектаминезнакомцами( )Решением. можетбытьч

астныйслучай

паттернаУстойчивый" кизменениям"Прямы. объектпотребуютсяоперациимвые.

 

6.15 Заданиякразделу6

 

 

ПаттерныСостояХранитель, ,Наблюдатель

:

 

1. Рассмпроблтремуть

работысистемы,основаннойна делениисостояния

.

2.Реализовать сохранениеобъектов.

3.Внестивсистемуобъект,которыйследитзасоссистемыоянием.

97

4.Построитьдиаграммуклассов

5.Представитьва расширнтылизациисистемыния

 

ПаттерныКоманда,Перенаправл,Посетительние

:

1.

Реализобрабок каквмареакциютнкуьдейс

твияпользователя

2.

Разорватьизлишнююсвязьмеждуклассиспутемамитемыперенаправления

 

3.

Внестивсистемуобъект,который

посещает объекты системы длявывода

 

информацииизмененияхихсостояниявзависимостиотусловий

 

4.Построитьдиаграммуклассов

5.Представитьваре расширнтылизациисистемыния

ПаттерныЦепочкаобязанностей,Посредник,Стратегия

:

1.Реалиобрзаовапросовбообъектамицепочкекуь

2.Разорватьизлишнююсвязьмеждуклассиспутемамитемысозданияпосредника

3. Реализовразличныестратегь

ииработысистемы,исходяизвнутреннегосостояния

действийпользователя

 

4.Построитьдиаграммуклассов

5.Представитьва расширнтылизациисистемыния

98

7Концепция

MVC

 

 

Название

MVC – этоаббревиатура: Modelмодель), (

Viewпредставление) (

, Controller

(контроллер).

 

 

 

Model-view-controller - схемаиспользнескшаблованпрлькоиектированиянов,сх помкотмодельщьюданныхрыхприл,пользовательскийжентерфейся взаимспользовдейсразделенынатовтидельныхколемтак,понентачто модификацияоднизкомпонегоказыминвтовимальноеаетоздействиенаостальные.

Этотшаблонразделяетработуприлнатриотдельныеженияфункциональныероли: модельданных(model),пользовательскийинтерфейс(view)управляющуюлогику

(controller).

Такимобра зом,изменен,вносодизкомпонемыея,оказываютминимальнотов возможноевоздействиенадругиекомпоненты.

Модельнезависитотпредставленияилиуправляющейлогики,чтоделаетвозможным проектированиемодкаклизависимогокомпонента,например, создаватьнесколько представлоднойлямод. енлий

7Классический.1 MVC

Модель

 

Модельисподоступаьзуетсяиманипулированияданными,являетсяпосредником

 

междупредставлениконтролл. ером

 

Крважнчертоййнем являетсяделито,чтониа

меетникакихзнанийотом,что

происхданнымитвконтпроллереедставлении.

 

Модельникнедолжнаделатьгдаилиожидатькаких

-либозапросов/издругих

компонентов.

 

99

Модель — этонечтовродепропункданнымгоск.Мтаовбольшинстведельслучае

в

являетсясамслочастьюжнойсистемы.

 

Представление

Представление — этоданные,полученныеотмодели,вывнужномодятсявиде.

Предстакжеотвавлениезаполуччад йствийотпользователяниестем

, чтобы

отправитьихконтроллеру.Например,

представлениеотображаеткнопкупользовательском

интерфейсе,апослееёнажатиявызываетсоот

ветствующконтроллердействи. е

Крважпойне,чтодляиматьтого,чтобыполучитьправильнуюMVC

-архитектуру,не

должнобытьникакихпрямыхвзаи одействий

ждупредставлениямимоделями.Вся

логикаобменаданнымеждунидолжнамибытьреализованаконтроллерах.

 

Возможныдвариеа:лизациинта

 

-ПредставлениереализосоотпаттерноманоетствииНаблюдатель« »

- Мотдаетдельданныеконтроллеру,которыйп

ередаетихпредставлению

.

Контроллер

 

 

Задачейконтролявляетсяполученпользоватеданныхераот иманипуляция

 

 

моделью.Имекон,иноторолонлько,явтерчастьюяетсяйсистемы,которая

 

 

взаимсподействульзователем

.

 

Контроллачинаетсвоюрабор

утольковрезультатевзаимодействияпользователя

 

представлени,которвызываоответствуфункцитмконтроллерающую

 

.

«MVC – этокаквыдачазамужпринцессы.Модель

– этоцарство,принцесса

– его

представ.Акоролениеь

– ееконтроллер»

 

100

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]