Содержание
- 2. Структурные паттерны
- 3. Паттерн Adapter Назначение: Преобразует существующий интерфейс класса в другой интерфейс, который понятен клиентам. При этом обеспечивает
- 4. UML-диаграмма классов паттерна Adapter Паттерн Adapter представляет собой программную обертку над уже существующими классами и предназначен
- 5. Пример паттерна Adapter Рассмотрим простой пример, когда следует применять паттерн Adapter. Пусть мы разрабатываем систему климат-контроля,
- 6. Пример реализации паттерна Adapter // Уже существующий класс температурного датчика окружающей среды class FahrenheitSensor // считаем
- 7. Результаты применения паттерна Adapter Достоинства паттерна Adapter: Паттерн Adapter позволяет повторно использовать уже имеющийся код, адаптируя
- 8. Паттерн Bridge (мост) Паттерн Bridge отделяет абстракцию от реализации так, что то и другое можно изменять
- 9. Паттерн Bridge (мост) Рассмотрим сложности расширения системы новыми типами на примере разработки логгера. Логгер это система
- 10. Пример иерархии на основе паттерна Bridge
- 11. UML-диаграмма классов паттерна Bridge
- 12. Описание паттерна Bridge Первая иерархия определяет интерфейс абстракции, доступный пользователю. Для случая проектируемого нами логгера абстрактный
- 13. Пример реализации паттерна Bridge class LoggerImpl; // Опережающее объявление class Logger { public: Logger(LoggerImpl* p); virtual
- 14. Пример реализации паттерна Bridge — продолжение Logger::Logger(LoggerImpl* p) : pimpl(p) { } Logger::~Logger() { delete pimpl;
- 15. Пример реализации паттерна Bridge — продолжение SocketLogger::SocketLogger(string & remote_host, int remote_port) : Logger( #ifdef MT new
- 16. Пример реализации паттерна Bridge class LoggerImpl { public: virtual ~LoggerImpl() {} virtual void console_log(string & str)
- 17. Пример реализации паттерна Bridge — продолжение void ST_LoggerImpl::console_log(string & str) { cout void ST_LoggerImpl::file_log(string & file,
- 18. Пример реализации паттерна Bridge — продолжение // ConsoleApplication41.cpp: пример паттерна Bridge // #include #include "Logger.h" int
- 19. паттерн Bridge Паттерны Bridge и Adapter имеют схожую структуру, однако, цели их использования различны. Если паттерн
- 20. паттерн Компоновщик (Composite) Паттерн Composite группирует схожие объекты в древовидные структуры. Рассматривает единообразно простые и сложные
- 21. UML-диаграмма классов паттерна Composite Для добавления или удаления объектов-потомков в составной объект Composite, класс Component определяет
- 22. Пример использования паттерна Компоновщик (Composite) Управление группами объектов может быть непростой задачей, особенно, если эти объекты
- 23. Пример реализации паттерна «Компоновщик» // Component class Unit { public: virtual int getStrength() = 0; virtual
- 24. Пример реализации паттерна «Компоновщик» // Composite #pragma once #include #include "Component.h" class CompositeUnit : public Unit
- 25. Пример реализации паттерна «Компоновщик» // Вспомогательная функция для создания легиона CompositeUnit* createLegion() { // легион содержит:
- 26. Пример реализации паттерна «Компоновщик» int main() { setlocale(LC_ALL, "rus"); // Римская армия состоит из 4-х легионов
- 27. Результаты применения паттерна Composite Достоинства паттерна Composite: В систему легко добавлять новые примитивные или составные объекты,
- 28. Паттерн Декоратор (Decorator) Паттерн Decorator используется для расширения функциональности объектов. Являясь гибкой альтернативой порождению классов, паттерн
- 29. UML-диаграмма классов паттерна Decorator
- 30. Пример реализации паттерна «Декоратор» #include using namespace std; class I { // НОЗ (LCD) - Interface
- 31. Пример реализации паттерна «Декоратор» class X : public D { // доп.функциональность OptionalOne public: X(I *core)
- 32. Пример реализации паттерна «Декоратор» int main() { I *anX = new X(new A); I *anXY =
- 33. Паттерн Декоратор (Decorator) Использование паттерна Decorator: Подготовьте исходные данные: один основной компонент и несколько дополнительных (необязательных)
- 34. Паттерн Фасад (Facade) Паттерн Facade предоставляет высокоуровневый унифицированный интерфейс к набору интерфейсов некоторой подсистемы, что облегчает
- 35. UML-диаграмма классов паттерна Facade
- 36. Пример реализации паттерна Facade /** Абстрактный музыкант - не является обязательной составляющей паттерна, введен для упрощения
- 37. Пример реализации паттерна Facade class Drummer : public Musician { public: Drummer(std::string &name) : Musician(name) {}
- 38. Пример реализации паттерна Facade int main() { setlocale(LC_ALL, "rus"); Band* band = new Band(); band->playCoolSong(); return
- 39. Паттерн Фасад (Facade) Использование паттерна Facade: Определите для подсистемы простой, унифицированный интерфейс. Спроектируйте класс "обертку", инкапсулирующий
- 40. Паттерн «Приспособленец» (FlyWeight) Паттерн Flyweight использует разделение для эффективной поддержки большого числа мелких объектов. Решаемая проблема:
- 41. UML-диаграмма классов паттерна Flyweight Использование паттерна Flyweight Убедитесь, что существует проблема повышенных накладных расходов. Разделите состояние
- 42. Пример реализации паттерна «приспособленец» class Icon { public: Icon(char *fileName) // приспособленец { strcpy_s(_name, sizeof(_name), fileName);
- 43. Пример реализации паттерна «приспособленец» class FlyweightFactory { public: static Icon *getIcon(char *name) { for (int i
- 44. Пример реализации паттерна «приспособленец» class DialogBox { public: DialogBox(int x, int y, int incr) : _iconsOriginX(x),
- 45. Пример реализации паттерна «приспособленец» class CommitTransaction : public DialogBox { public: CommitTransaction(Icon *first, Icon *second, Icon
- 46. Паттерн «Приспособленец» (FlyWeight) Паттерн Flyweight показывает, как эффективно разделять множество мелких объектов. Ключевая концепция - различие
- 47. Паттерн «прокси» (Proxy) (заместитель, суррогат) Назначение паттерна Proxy: Паттерн Proxy является суррогатом или замеcтителем другого объекта
- 48. UML-диаграмма классов паттерна Proxy
- 49. Пример реализации паттерна «прокси» class RealImage { int m_id; public: RealImage(int i) { m_id = i;
- 50. Пример реализации паттерна «прокси» int main() { setlocale(LC_ALL, "rus"); Image images[5]; for (int i; true;) {
- 52. Скачать презентацию