Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Паттерны проектирования (design patterns)

Содержание

Что такое паттерны (шаблоны) проектирования?Эффективные способы решения характерных задач проектированияОбобщенное описание решения задачи, которое можно использовать в различных ситуацияхОО паттерны проектирования часто показывают отношения и взаимодействия между классами и объектамиАлгоритмы не являются паттернами, т.к. решают задачу
Паттерны проектирования (Design patterns) Что такое паттерны (шаблоны) проектирования?Эффективные способы решения характерных задач проектированияОбобщенное описание решения ПользаКаждый паттерн описывает решение целого класса проблемКаждый паттерн имеет известное имяоблегчается взаимодействие Порождающие паттерны Порождающие паттерны проектированияАбстрагируют процесс инстанцирования объектовСписок паттерновАбстрактная фабрика (Abstract Factory)Строитель (Builder)Фабричный метод (Factory method)Прототип (Prototype)Одиночка (Singleton) Abstract Factory (Абстрактная фабрика) Назначение паттерна «Абстрактная фабрика»Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, Паттерн «Абстрактная фабрика»Шаблон проектирования, позволяющий изменять поведение системы, варьируя создаваемые объекты, при Реализация паттернаПаттерн «Абстрактная фабрика» реализуется созданием абстрактного класса Factory, который представляет собой Применение паттернаИспользуйте паттерн, когдаСистема не должна зависеть от того, как создаются, компонуются СтруктураОбъявляет интерфейс для операций, создающих абстрактные объекты-продуктыРеализует операции, создающие конкретные объекты-продукты;Объявляет интерфейс Пример использованияПри разработке приложений с графическим интерфейсом пользователя необходимо создавать различные элементы Иерархия классовCButtonCWindowsButtonCMacOSXButtonCRadioButtonCWindowsRadioButtonCMacOSXRadioButtonCCheckBoxCWindowsCheckBoxCMacOSXCheckBox Абстрактные и конкретные элементы управленияclass CButton{public:	virtual ~CButton(){}	//...};class CWindowsButton : public CButton{	//...};class CMacOSXButton Абстрактная и конкретные фабрикиclass CUIFactory{public:	virtual CButton* CreateButton()const=0;	virtual CCheckBox* CreateCheckBox()const=0;};class CWindowsUIFactory : public Преимущества использования паттерна «Абстрактная фабрика»Изоляция конкретных классов продуктовФабрика изолирует клиента от деталей Недостатки паттерна «Абстрактная фабрика»Трудность поддержания новых типов продуктовИнтерфейс абстрактной фабрики фиксирует набор Пример – фабрика, создающая элементы игрового поляenum ItemType{	WALL,	WATER,	FOREST,	SAND,};class IMapItem{public:	virtual ~IMapItem(){}	// ...};class CWall Builder (Строитель) Назначение паттерна «Строитель»Отделяет конструирование сложного объекта от его представления, так что в Область применения паттерна «Строитель»Алгоритм создания сложного объекта не должен зависеть от того, СтруктураЗадает абстрактный интерфейс для частей объекта ProductРеализует интерфейс Builder, конструирует и собирает Отношения между участниками паттернаКлиент создает новый объект «Распорядитель» (Director) и конфигурирует его Достоинства паттерна «Строитель»Позволяет изменять внутреннее представление продуктаРаспорядителю предоставляется абстрактный интерфейс Строителя, скрывающего Пример использованияВ редакторе форматированного текстового документа необходимо реализовать возможность преобразования его в Иерархия классовРаспорядительПродуктыСтроитель Реализация сущности «Строитель»class CTextConverter{public:	virtual void ConvertText			(std::string const& s){}	virtual void ConvertFontChange			(CFont const& fnt){}	// Реализация сущности «Распорядитель»class CFormattedTextReader{public:	void Read(CFormattedText const& text, CTextConverter & converter)	{		for (size_t index Реализация клиентаvoid ConvertToPDF(CFormattedText const& text, std::string const& outputFile){	// создаем строителя	CPDFConverter converter;	// создаем
Слайды презентации

Слайд 2 Что такое паттерны (шаблоны) проектирования?
Эффективные способы решения характерных

Что такое паттерны (шаблоны) проектирования?Эффективные способы решения характерных задач проектированияОбобщенное описание

задач проектирования
Обобщенное описание решения задачи, которое можно использовать в

различных ситуациях
ОО паттерны проектирования часто показывают отношения и взаимодействия между классами и объектами
Алгоритмы не являются паттернами, т.к. решают задачу вычисления, а не программирования

Слайд 3 Польза
Каждый паттерн описывает решение целого класса проблем
Каждый паттерн

ПользаКаждый паттерн описывает решение целого класса проблемКаждый паттерн имеет известное имяоблегчается

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

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

Слайд 4 Порождающие паттерны

Порождающие паттерны

Слайд 5 Порождающие паттерны проектирования
Абстрагируют процесс инстанцирования объектов
Список паттернов
Абстрактная фабрика

Порождающие паттерны проектированияАбстрагируют процесс инстанцирования объектовСписок паттерновАбстрактная фабрика (Abstract Factory)Строитель (Builder)Фабричный метод (Factory method)Прототип (Prototype)Одиночка (Singleton)

(Abstract Factory)
Строитель (Builder)
Фабричный метод (Factory method)
Прототип (Prototype)
Одиночка (Singleton)


Слайд 6 Abstract Factory (Абстрактная фабрика)

Abstract Factory (Абстрактная фабрика)

Слайд 7 Назначение паттерна «Абстрактная фабрика»
Предоставляет интерфейс для создания семейств

Назначение паттерна «Абстрактная фабрика»Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых

взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов


Слайд 8 Паттерн «Абстрактная фабрика»
Шаблон проектирования, позволяющий изменять поведение системы,

Паттерн «Абстрактная фабрика»Шаблон проектирования, позволяющий изменять поведение системы, варьируя создаваемые объекты,

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

создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов

Слайд 9 Реализация паттерна
Паттерн «Абстрактная фабрика» реализуется созданием абстрактного класса

Реализация паттернаПаттерн «Абстрактная фабрика» реализуется созданием абстрактного класса Factory, который представляет

Factory, который представляет собой интерфейс для создания абстрактных объектов-продуктов
На

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


Слайд 10 Применение паттерна
Используйте паттерн, когда
Система не должна зависеть от

Применение паттернаИспользуйте паттерн, когдаСистема не должна зависеть от того, как создаются,

того, как создаются, компонуются и представляются входящие в нее

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

Слайд 11 Структура
Объявляет интерфейс для операций, создающих абстрактные объекты-продукты
Реализует операции,

СтруктураОбъявляет интерфейс для операций, создающих абстрактные объекты-продуктыРеализует операции, создающие конкретные объекты-продукты;Объявляет

создающие конкретные объекты-продукты;
Объявляет интерфейс для типа объекта-продукта
Определяет объект-продукт, создаваемый

соответствующей конкретной фабрикой

Пользуется исключительно интерфейсами, которые объявлены в классах AbstractFactory и AbstractProduct


Слайд 12 Пример использования
При разработке приложений с графическим интерфейсом пользователя

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

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

списки и т.п.
Их создание и работа с ними в различных ОС осуществляется по-разному
Чтобы приложение можно было легче перенести в другую ОС в нем не должно быть жесткой привязки к типам конкретных классов элементов управления
Паттерн «Абстрактная фабрика» облегчает решение данной задачи

Слайд 13 Иерархия классов
CButton
CWindowsButton
CMacOSXButton
CRadioButton
CWindowsRadioButton
CMacOSXRadioButton
CCheckBox
CWindowsCheckBox
CMacOSXCheckBox

Иерархия классовCButtonCWindowsButtonCMacOSXButtonCRadioButtonCWindowsRadioButtonCMacOSXRadioButtonCCheckBoxCWindowsCheckBoxCMacOSXCheckBox

Слайд 14 Абстрактные и конкретные элементы управления
class CButton
{
public:
virtual ~CButton(){}
//...
};

class CWindowsButton

Абстрактные и конкретные элементы управленияclass CButton{public:	virtual ~CButton(){}	//...};class CWindowsButton : public CButton{	//...};class

: public CButton
{
//...
};

class CMacOSXButton : public CButton
{
//...
};
class CCheckBox
{
public:
virtual ~CCheckBox(){}
//

...
};

class CWindowsCheckBox : public CCheckBox
{
// ...
};

class CMacOSXCheckBox : public CCheckBox
{
// ...
};

Слайд 15 Абстрактная и конкретные фабрики
class CUIFactory
{
public:
virtual CButton* CreateButton()const=0;
virtual CCheckBox*

Абстрактная и конкретные фабрикиclass CUIFactory{public:	virtual CButton* CreateButton()const=0;	virtual CCheckBox* CreateCheckBox()const=0;};class CWindowsUIFactory :

CreateCheckBox()const=0;
};

class CWindowsUIFactory : public CUIFactory
{
public:
virtual CButton* CreateButton()const
{
return new CWindowsButton();
}
virtual

CCheckBox* CreateCheckCBox()const
{
return new CWindowsCheckBox();
}
};

class CMacOSXUIFactory : public CUIFactory
{
public:
virtual CButton* CreateButton()const
{
return new CMacOSXButton();
}
virtual CCheckBox* CreateCheckBox()const
{
return new CMacOSXCheckBox();
}
};

void BuildUI(CUIFactory const& uiFactory)
{
CButton * pOKButton = uiFactory.CreateButton();
CCheckBox * pCheckBox= uiFactory.CreateCheckBox();
}
int main(int argc, char* argv[])
{
CWindowsUIFactory uiFactory;
BuildUI(uiFactory);
return 0;
}


Слайд 16 Преимущества использования паттерна «Абстрактная фабрика»
Изоляция конкретных классов продуктов
Фабрика

Преимущества использования паттерна «Абстрактная фабрика»Изоляция конкретных классов продуктовФабрика изолирует клиента от

изолирует клиента от деталей реализации классов продуктов
Имена изготавливаемых классов

известны только конкретной фабрике, в коде клиента они не упоминаются
Клиенты манипулируют экземплярами продуктов только через их абстрактные интерфейсы
Упрощение замены семейств продуктов
Приложение может изменить семейство продуктов просто подставив новую конкретную фабрику
Гарантия сочетаемости продуктов
Если продукты спроектированы для совместного использования, важно чтобы в каждый момент времени приложение работало с продуктами единственного семейста

Слайд 17 Недостатки паттерна «Абстрактная фабрика»
Трудность поддержания новых типов продуктов
Интерфейс

Недостатки паттерна «Абстрактная фабрика»Трудность поддержания новых типов продуктовИнтерфейс абстрактной фабрики фиксирует

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

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

Слайд 18 Пример – фабрика, создающая элементы игрового поля
enum ItemType
{
WALL,
WATER,
FOREST,
SAND,
};

class

Пример – фабрика, создающая элементы игрового поляenum ItemType{	WALL,	WATER,	FOREST,	SAND,};class IMapItem{public:	virtual ~IMapItem(){}	// ...};class

IMapItem
{
public:
virtual ~IMapItem(){}
// ...
};
class CWall : public IMapItem {};
class CWater

: public IMapItem {};
class CForest : public IMapItem {};
class CSand : public IMapItem {};

class CMapItemsFactory
{
public:
IMapItem* CreateItem(ItemType type)const
{
switch (type)
{
case WALL: return new CWall();
case WATER: return new CWall();
case FOREST: return new CForest();
case SAND: return new CSand();
default:
throw new std::invalid_argument
("Unknown item type");
}
}
};


Слайд 19 Builder (Строитель)

Builder (Строитель)

Слайд 20 Назначение паттерна «Строитель»
Отделяет конструирование сложного объекта от его

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

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

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

Слайд 21 Область применения паттерна «Строитель»
Алгоритм создания сложного объекта не

Область применения паттерна «Строитель»Алгоритм создания сложного объекта не должен зависеть от

должен зависеть от того, из каких частей состоит объект

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

Слайд 22 Структура
Задает абстрактный интерфейс для частей объекта Product
Реализует интерфейс

СтруктураЗадает абстрактный интерфейс для частей объекта ProductРеализует интерфейс Builder, конструирует и

Builder, конструирует и собирает вместе части продукта
Определяет создаваемое представление

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

Конструирует продукт при помощи интерфейса Builder

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


Слайд 23 Отношения между участниками паттерна
Клиент создает новый объект «Распорядитель»

Отношения между участниками паттернаКлиент создает новый объект «Распорядитель» (Director) и конфигурирует

(Director) и конфигурирует его новым объектом-строителем Builder
Распорядитель уведомляет строителя

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

Слайд 24 Достоинства паттерна «Строитель»
Позволяет изменять внутреннее представление продукта
Распорядителю предоставляется

Достоинства паттерна «Строитель»Позволяет изменять внутреннее представление продуктаРаспорядителю предоставляется абстрактный интерфейс Строителя,

абстрактный интерфейс Строителя, скрывающего структуру продукта и процесс сборки
Для

изменения внутреннего представления достаточно определить новую реализацию Строителя
Изолирует код, реализующий конструирование и представление
Клиенту не нужно знать о классах, задающих внутреннюю структуру продукта (в интерфейсе строителя они отсутствуют)
Дает более тонкий контроль над процессом конструирования
Процесс построения продукта происходит не сразу, как в других порождающих паттернах, а шаг за шагом

Слайд 25 Пример использования
В редакторе форматированного текстового документа необходимо реализовать

Пример использованияВ редакторе форматированного текстового документа необходимо реализовать возможность преобразования его

возможность преобразования его в различные форматы
Plain text, HTML, RTF,

PDF, DOC, DOCX
Список можно продолжить
Задача решается путем введения сущностей
Распорядитель - CFormattedTextReader
Строитель – CTextConverter
Конкретный Строитель – CHtmlConverter, CRTFConverter, CPlainTextConverter, CPDFConverter, …
Продукт – CPlainTextDocument, CHtmlDocument, CRTFDocument, CPDFDocument, …

Слайд 26 Иерархия классов
Распорядитель
Продукты
Строитель

Иерархия классовРаспорядительПродуктыСтроитель

Слайд 27 Реализация сущности «Строитель»
class CTextConverter
{
public:
virtual void ConvertText
(std::string const& s){}
virtual

Реализация сущности «Строитель»class CTextConverter{public:	virtual void ConvertText			(std::string const& s){}	virtual void ConvertFontChange			(CFont const&

void ConvertFontChange
(CFont const& fnt){}
// …
};

class CPlainTextConverter
: public CTextConverter
{
public:
void

ConvertText(std::string const& s)
{
// …
}
std::string const & GetPlainText()const
{
return m_plainText;
}
private:
std::string m_plainText;
};

class CPDFConverter
: public CTextConverter
{
public:
void ConvertText(std::string const& w)
{
// ...
}
void ConvertFontChange(CFont const& fnt)
{
// ...
}

CPDFDocument const& GetPDFDocument() const
{
return m_pdfDocument;
}
private:
CPDFDocument m_pdfDocument;
};


Слайд 28 Реализация сущности «Распорядитель»
class CFormattedTextReader
{
public:
void Read(CFormattedText const& text, CTextConverter

Реализация сущности «Распорядитель»class CFormattedTextReader{public:	void Read(CFormattedText const& text, CTextConverter & converter)	{		for (size_t

& converter)
{
for (size_t index = 0; index < text.GetItems();

++index)
{
CTextItem const & item = text.GetItem(index);
CTextRangeItem const* pTextRange = NULL;
CFontChangeCommand const& * pFontCommand = NULL;
if (pTextRange = dynamic_cast(&item))
{
converter.ConvertText(pTextRange->GetText());
}
else if (pFontCommand = dynamic_cast(&item))
{
converter.ConvertFontChange(pFontCommand->GetFont());
}
else if (…) { … } …
}
}
};

  • Имя файла: patterny-proektirovaniya-design-patterns.pptx
  • Количество просмотров: 117
  • Количество скачиваний: 0
- Предыдущая Джонатан Свифт
Следующая - Христианство