Шаблоны проектирования

Содержание

Слайд 2

Обязанности классов Обязанность (responsibility) – это контракт или обязательство класса: Обязанность

Обязанности классов

Обязанность (responsibility) – это контракт или обязательство класса:
Обязанность знания (knowing).

Реализуется методами доступа (не изменяется состояние объекта). Объект предоставляет:
информацию о закрытых инкапсулированных данных
информацию о связанных (агрегируемых) объектах
результаты вычислений
Обязанность действия (doing). Реализуется методами управления и реализации (изменяют состояние)
выполнение действий над самими объектами
инициация действий, выполняемых другими объектами
координация других объектов
Шаблон проектирования (design pattern) – это готовое решение для часто встречающихся задач. Шаблон описывает распределение обязанностей классов и объектов в определенной ситуации.
Порождающие шаблоны. Описывают ЧТО создается, КЕМ создается, КАК создается и КОГДА создается. Локализуют сведения об особенностях создаваемого объекта и процедуре создания.
Структурные шаблоны. Описывают как составлять сложные структуры из классов и объектов с определенными свойствами.
Шаблоны поведения. Описывают каким образом можно организовать и изменять поведение объектов
Слайд 3

«Одиночка» (Singleton) class Singleton { public: static Singleton* Instance() { if(_instance

«Одиночка» (Singleton)

class Singleton
{
public:
static Singleton* Instance()
{
if(_instance == 0)
{

_instance = new Singleton;
}
return _instance;
}
Data GetData()
{
return _data;
}
private:
Singleton() { _data.x = 3; /* действия */}
static Singleton* _instance;
Data data;
}

void main()
{
Data d1 = Singleton::Instance()->GetData();
}

Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему доступ

Слайд 4

«Фабричный метод» (Factory Method) Определяет интерфейс для создания объекта, позволяя подклассам

«Фабричный метод» (Factory Method)

Определяет интерфейс для создания объекта, позволяя подклассам определять,

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

реализация

Слайд 5

«Абстрактная фабрика» (Abstract Factory) Предоставляет интерфейс для создания семейств взаимосвязанных или

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

Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых

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

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

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

Слайд 7

«Абстрактная фабрика» (Abstract Factory) class Client { void f(AbstractFactory* factory) {

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

class Client
{
void f(AbstractFactory* factory)
{
AbstractProductA aProduct

= factory-> CreateProductA();
AbstractProductB bProduct = factory-> CreateProductB();
/* Действия с aProduct, bProduct */
}
}
void main()
{
Client client;
AbstractFactory* factory =
new ConcreteFactory1(); // а можно ConcreteFactory2
client->f(factory);
}
Слайд 8

«Декоратор» (Decorator) Динамически добавляет объекту новые обязанности. Является альтернативой наследованию

«Декоратор» (Decorator)

Динамически добавляет объекту новые обязанности. Является альтернативой наследованию

Слайд 9

«Декоратор» (Decorator)

«Декоратор» (Decorator)

Слайд 10

«Стратегия» (Strategy) Определяет семейство взаимозаменяемых алгоритмов, инкапсулируя их. Алгоритмы могут варьироваться не зависимо от клиентов

«Стратегия» (Strategy)

Определяет семейство взаимозаменяемых алгоритмов, инкапсулируя их. Алгоритмы могут варьироваться не

зависимо от клиентов
Слайд 11

«Компоновщик» (Composite) Компонует объекты в древовидные структуры. Позволяет клиенту единообразно взаимодействовать с простыми и составными объектами

«Компоновщик» (Composite)

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

простыми и составными объектами
Слайд 12

«Компоновщик» (Composite)

«Компоновщик» (Composite)

Слайд 13

«Наблюдатель» (Observer) Уровень представления Уровень бизнес-логики Устанавливает отношение между объектами «один

«Наблюдатель» (Observer)

Уровень представления

Уровень бизнес-логики

Устанавливает отношение между объектами «один ко многим» так,

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