Содержание
- 2. Компоновщик Суть паттерна. Компоновщик — это структурный паттерн проектирования, который позволяет сгруппировать множество объектов в древовидную
- 3. Если решать задачу в лоб, то вам потребуется открыть все коробки заказа, перебрать все продукты и
- 4. Решение. Компоновщик предлагает рассматривать Продукт и Коробку через единый интерфейс с общим методом получения стоимости. Продукт
- 5. Для военной стратегической игры ”Пунические войны ”, описывающей военное противостояние между Римом и Карфагеном, каждая боевая
- 6. #include #include // Component class Unit{ public: virtual int getStrength() = 0; virtual void addUnit(Unit* p)
- 7. // Composite class CompositeUnit: public Unit { public: int getStrength() { int total = 0; for(int
- 8. // Вспомогательная функция для создания легиона CompositeUnit* createLegion(){ // Римский легион содержит: CompositeUnit* legion = new
- 9. Применимость Когда вам нужно представить древовидную структуру объектов. Паттерн Компоновщик предлагает хранить в составных объектах ссылки
- 10. Преимущества и недостатки «+»: Упрощает архитектуру клиента при работе со сложным деревом компонентов. Облегчает добавление новых
- 11. Декоратор Суть паттерна. Декоратор — это структурный паттерн проектирования, который позволяет динамически добавлять объектам новую функциональность,
- 12. В какой-то момент стало понятно, что одних email-оповещений пользователям мало. Некоторые из них хотели бы получать
- 13. Но затем кто-то резонно спросил, почему нельзя выбрать несколько типов оповещений сразу? Ведь если вдруг в
- 14. Решение. Наследование — это первое, что приходит в голову многим программистам, когда нужно расширить какое-то существующее
- 15. Одним из способов обойти эти проблемы является механизм композиции. Это когда один объект содержит ссылку на
- 16. #include #include class IComponent { public: virtual void operation() = 0; virtual ~IComponent(){} }; class Component
- 17. class DecoratorOne : public IComponent { std::shared_ptr m_component; public: DecoratorOne(IComponent* component): m_component(component) {} virtual void operation()
- 18. int main() { DecoratorTwo obj(new DecoratorOne(new Component())); obj.operation(); // prints "Hello, World!\n" return 0; }
- 19. Применимость Когда вам нужно добавлять обязанности объектам на лету, незаметно для кода, который их использует. Объекты
- 20. Преимущества и недостатки «+»: Большая гибкость, чем у наследования. Позволяет добавлять обязанности на лету. Можно добавлять
- 21. Заместитель Суть паттерна. Заместитель — это структурный паттерн проектирования, который позволяет подставлять вместо реальных объектов специальные
- 22. Мы могли бы создавать этот объект не в самом начале программы, а только тогда, когда он
- 23. Решение. Паттерн Заместитель предлагает создать новый класс-дублёр, имеющий тот же интерфейс, что и оригинальный служебный объект.
- 24. /**"Subject" */ class IMath { public: virtual double add(double, double) = 0; virtual double sub(double, double)
- 25. /*"Proxy Object“*/ class MathProxy : public IMath { public: MathProxy() { math = new Math(); }
- 26. #include using std::cout; using std::endl; int main() { // Create math proxy IMath *proxy = new
- 27. Применимость Ленивая инициализация (виртуальный прокси). Когда у вас есть тяжёлый объект, грузящий данные из файловой системы
- 28. Логирование запросов (логирующий прокси). Когда требуется хранить историю обращений к сервисному объекту. Заместитель может сохранять историю
- 29. Преимущества и недостатки «+»: Позволяет контролировать сервисный объект незаметно для клиента. Может работать, даже если сервисный
- 30. Поведенческие паттерны Паттерны поведения рассматривают вопросы о связях между объектами и распределением обязанностей между ними. Для
- 31. Цепочка Обязанностей (Chain Of Responsibilities) Команда (Command) Итератор (Iterator) Посредник (Mediator) Хранитель (Memento) Объект Null (Null
- 32. Итератор Суть паттерна. Итератор — это поведенческий паттерн проектирования, который даёт возможность последовательно обходить элементы составных
- 33. Но как бы ни была структурирована коллекция, пользователь должен иметь возможность последовательно обходить её элементы, чтобы
- 34. Решение. Идея паттерна Итератор состоит в том, чтобы вынести поведение обхода коллекции из самой коллекции в
- 35. class Stack{ int items[10]; int sp; public: friend class StackIter; Stack() { sp = - 1;
- 36. class StackIter { const Stack &stk; int index; public: StackIter(const Stack &s): stk(s) { index =
- 37. bool operator == (const Stack &l, const Stack &r) { StackIter itl(l), itr(r); for (; itl();
- 38. Применимость Когда у вас есть сложная структура данных, и вы хотите скрыть от клиента детали её
- 39. Преимущества и недостатки «+»: Упрощает классы хранения данных. Позволяет реализовать различные способы обхода структуры данных. Позволяет
- 40. Шаблонный метод Суть паттерна. Шаблонный метод — это поведенческий паттерн проектирования, который определяет скелет алгоритма, перекладывая
- 41. Проблема. Вы пишете программу для дата-майнинга в офисных документах. Пользователи будут загружать в неё документы в
- 42. В какой-то момент вы заметили, что код всех трёх классов обработки документов хоть и отличается в
- 43. Решение. Паттерн Шаблонный метод предлагает разбить алгоритм на последовательность шагов, описать эти шаги в отдельных методах
- 44. Стандартизуйте основу алгоритма в шаблонном методе базового класса. Для шагов, требующих особенной реализации, определите "замещающие" методы.
- 45. class Base{ void a() { cout void c() { cout void e() { cout // 2.
- 46. class One: public Base{ // 3. Производные классы реализуют "замещающие" методы. /*virtual*/void ph1() { cout }
- 47. int main() { Base *array[] = { &One(), &Two() }; for (int i = 0; i
- 48. Применимость Когда подклассы должны расширять базовый алгоритм, не меняя его структуры. Шаблонный метод позволяет подклассам расширять
- 50. Скачать презентацию

































![class Stack{ int items[10]; int sp; public: friend class StackIter; Stack() {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/934512/slide-34.jpg)











![int main() { Base *array[] = { &One(), &Two() }; for (int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/934512/slide-46.jpg)

Лабораторная работа. СКУД с функцией запрета двойного прохода
Периферийные устройства ПК
Отчёт 2020. Кирилловской сельской библиотеки
Моделирующий алгоритм
Автополив цветов
Проектирование базы данных. Определение предметной области. Уровни представления данных
Программы для создания интересного контента Crello и Stop Motion Studio
Закрепление материала о документах Microsoft Word
СВАН-анализ
Готов к защите и обороне? Программирование
Верховодов Г.С. 712
Знакомство с Visual Studio 2010. Visual Basic 2010
TAILS (The Amnesic Incognito Live System)
BibTeX – пакет LaTeX для создания форматированных списков библиографий
Использование информационных технологий в учебном предмете Устройство самоходных машин сельхоз назначения
Лабораториум, апрель
Публицистические жанры
Информационный дизайн
Заголовок презентации. Подготовка к показу презентации (Виды компьютерной графики)
Знакомство с редактором компас-3d, v18
Программирование в среде Robot C. Арифметические действия
Шифрование с открытым ключом. Алгоритм RSA
Маска в Photoshop. Компьютерная графика. Задание 8
Создание сервиса Гарантийные дороги на официальном сайте города Ижевска в 2016 году
Создание текстового документа
Анимация перехода слайдов
Обеспечение населения Белгородской области информацией о деятельности органов государственной власти
ИС Астана - 1. Сотрудничество КГД МФ РК с ЮНКТАД ООН