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

Patterns2015

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

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

 

Избавляетпроектировщотнеобходвстримостика

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

классы.

 

Недостатки

 

Возникаетдополнительныйуровеньподклассов.

 

5.3 Абстрактнфабрика( я

Abstract factory )

Фабрикасоздаобъ,сосеткизтнескольксоставныхоящиеыэлементовили

 

обладающнесколькимиразличны

свойствами.

Клиентысоздаюткомплексныеобъектыиликомплексныесв йствабъектов,пользуясь

исключительноинтерфейс м

AbstractFactoryКлиеничегоне.известнотамклассах,

реализующихобъектыконкретноготипа.

 

Другимисловами,клиентыдолишьжны

придерживатьсяинтерфейса,определенного

абстрактным,неконкретнымклассом.

 

Пример

Построитьгенераторсценариев,которыхесть

:

61

1.МестособытияШахта( ,Дремучийлес,Ферма)

2.ПостоянныйобитатШахтер( ,Ф) льрмер

3. Волшебникгерой/ Гном( ,Рыцарь,Гобл

ин)

Обычнаяреализация

– наосновефабричныхметодов.

 

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

 

 

Абстрактнфабрикинкапсулируетответственнязасоздклиапроцессссовихсть

 

создания,следователь,онаизоклиеотдеталейрунрео классовлизации.Простая

 

заменаАбстрактно

йфабрики,т..онаиспользуетсявприлтолькожедиразприн и

 

инстанцировании.

 

 

Недостатки

 

 

ИнтерАбстрактнойфабрикиейсфикснаборобъектоврует,котм создатьрыежно.

 

РасширенАбстрактнойфабрикидляизготеобъвыхвлчасезакнияторуднительв

но.

5Прототип.3 (

Prototype)

 

Задаетвидысоздаваеобъектпомоэкземпляраыхщьюв

-прототипасоздаетновые

объектыпутемкопированияэтогопрототипа

.

Прототип – пример(1)

class Animal { protected:

int age; char * nameFood; public:

Animal() {age = 0; nameFood = new char[20;}

62

Animal(int n) {age = n; nameFood = new char[20];} Animal(const Animal* animal) {

this->age = animal -> age; memcpy(this->nameFood, animal->nameFood,strlen(animal->nameFood)+1);

}

virtual void feed() { cout << "Animal age " << age << " likes to eat " << nameFood << endl;

}

virtual Animal *clone() = 0;

};

Прототип – пример(2)

class Cat : public Animal // кошачьи

{

public:

Cat() {memcpy(this->nameFood,"meat",5);}

Cat(int n):Animal(n) {memcpy(this->nameFood,"meat",5); cout<<"Cat\n";} Animal *clone()

{

return new Cat(*this);

}

};

Прототип – пример(3)

class Tiger : public Cat // тигр

{

public:

Tiger() {cout<<"Tiger\n";}

Tiger(int n):Cat(n) {cout<<"Tiger\n";} void growl()

{

cout << "Tiger growls" << endl;

}

Animal *clone()

{

return new Tiger(*this);

}

};

Прототип – пример(4)

int main(int argc, char *argv[]) {

Tiger *tigerPrototype = new Tiger(); Animal *tiger2 = tigerPrototype->clone(); tigerPrototype ->feed();

tiger2->feed();

Animal * newAnimal = new Tiger(2);

63

Animal * animal2 = tigerPrototype->clone(); newAnimal->feed();

animal2->feed();

Animal * horse = new Horse(); Animal * animal3 = horse->clone(); horse->feed();

animal3->feed(); return 0;

}

Результатработы

5Строитель.4 ( Builder)

Проблема

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

Результат

Отделиликонструирсл жнбъектаотегопредсваниего,такчрезультатавленияо

е

64

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

Диаграммапоследовательности

Примерреализации

Создаемавтппроизводствуматгамбургеров Конструктор класса

Director ::Director (Builder *b){myBuilder = b;}

Производство

void Director::construct(){ b-> addSalad();

b -> addCheese(); b -> addMeat();

}

Недостатки

Builderдляклассаисоздаваимпродуктжесвязанымыйсткомеждусобой,поэтомупри

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

СтроительФабрика

Фабрикаисподсозданильзуетсяэкзем,типкоторогозависитлярапередаваемых параметров.

• Строительиспользуется,к

огдатизвестенп,надолишьпо

-разаполнятьномуполя

объекта.

 

 

65

Итог:фабсоздаетразличныеикатипы,длястроителяисп динльзуетсятотжетип,но сразнымнаполнением .

5.5 Одиночка(

Singleton)

 

Проблема

 

 

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

 

создатьглобальнточкудоступаю

 

.

Результат

 

 

Самклассконт,чторолируетн стьголько

одинэкземпляр,можетзапретить

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

 

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

 

66

Примеры проблем

 

Впрограмможетбытьдовольномногосущне,к торыебязателстейдолжныбытьно

 

всегоодномэкзем,нап:должнаримляребытьлишьоднарфайловаясистема,лишьодин

 

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

ия

системногожурналасообщений

.

Реализация

 

Singleton * Singleton::instance = NULL; Singleton* Singleton::Instance (int data) {

if (instance == 0) { cout<<"new object \n"; instance = new Singleton(data);

} else cout<<"object already exists!\n"; return instance;

}

Singleton* Singleton::Instance () {

if (instance == 0) { cout<<"new object \n"; instance = new Singleton();

} else cout<<"object already exists!\n"; return instance;

}

Работа с объектом

int main(int argc, char *argv[]) {

Singleton * s = Singleton::Instance (123); Singleton * d = Singleton::Instance (456); s->run();

d ->run(); return 0;

}

Резульработыат

Отличияотстатичеклассакого

67

У статичекласможетбысмнкогоатоьдчекго,вступаSinglet

on – одна;

объект-одиночкуможнопередпар,статичеметромькласский

– нельзя;

вслучаеSingletonестьвозмконтролироватьжнвремяжизнистьобъекта,случае

состатичеклассомким

– нет;

 

объект-одиночкуможносериализировать,статичеклас кий

– нельзя.

5Пул.6объектов(

Object Pool)

 

Проблема

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

Решение

 

 

Желательно,чтобывсемногократноисп бъектыльзуемые,свободныенекот

орый

момвр,ехрантмеводномнитомлисьжепулеобъект.Тогдаимоиупржвнаовлять

 

основеединойполи.ДляэтклассогоикиObjectпроектируетсяпомощьюPoolпаттерна

 

Singleton. Еслиунасмногооднотипныхобъектов,созданиеуничтожениекоторых

 

занимаетмногоресур,удобноспользоватьэтотпа. терн

 

 

Пулыобъектовизвестны( такжекакпулыр )сурсовисподуправленияьзуются

 

кэшированиемобъектов.Клиент,имеющийдоступпулуобъектов,можетизбежать

 

созданияобъектоввых,простозапрашив

 

аявпусозданныйжелеэкземпляр.Пулобъектов

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

 

ограничениемколичествасоздаваемыхобъектов.Уничтожобъектазамнангояетсяие

 

возврпулддаятльнейшегоиспользовани

 

я.

Важныймомент:

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

иметдлявьодзвратасвоёначальноесостоян,чтобыприповторномиеспользовании

 

обънебылотакихктад ,которыенныхосталисьсозначениямиотпрошлогоиспользован

ия.

Реализация: наосновестекаилиочередивзавиотстратегииимостивыборкобъекта изпулаивозеговпулрата

68

5.7 Заданиякразделу5

 

 

 

ПаттерныФабрика,Абстрактнфабрик,Фабричныйметод,Прототипя

:

1.

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

системе.Предложитьреализациюна

 

основефабрметодаили/ чногоабстрактнойфабрики

.

2.

Ввестидляодногоизклассовзможностьклонированияобъектов

 

3.

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

 

 

4.

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

 

 

ПатCтерроитель, Cнглтоы

 

н,Пул :

1.

РассмпроблсоздатрнаосемутьпаттернаовеияСтроитель.

 

2.

Реализовмножествхраобътьнениенаосновеннктпулаобъектов.

Пулможно

 

реализкакодиночныйватьбъект.

 

3.

Выполнитьсравнитеанализреапорожденияизацииьный

объектов

4.

Построитьдиа

граммуклассов

 

5.

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

 

69

6 Поведенческиешаблоны

 

 

Паттерныповеденияопределяютспособывзаимеждубъекдейсвовремятамивия

 

выпрограммыолнения.

 

 

Какправипаттернов,реализацияповеденияос двухована

ринципах:

1.

Компклассови зициябъектов

 

2.

Инкапосуляциявобъектеедения

иделемугированиезапросов

Списокшаблонов

:

 

1.

State

 

Состояние

2.

Observer

 

Наблюдатель

3.

Memento

 

Хранитель

4.

Command

 

Команда

5.

Visitor

 

Посетитель

6.

Strategy

 

Стратегия

7.

Chain of Responsibility

Цепочкаобязанностей

8.

Mediator

 

Посредник

9.

Indirection

 

Перенаправление

10.

Pure Fabrication

Искусственный

11.

SnapShot

 

Моментальныйснимок

12.

Фильтр

 

Filter

13.

Read-Only Interface

Толькодлячтения

14.

Interpreter

 

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

15.

Controller

 

Контроллер

16.

Null Object

 

Нулевойобъект

17.

Template Method

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

70

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