Содержание
- 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)

Электронные таблицы
Python. Пишем свои функции
Система дистанционного обучения Мoodle. Возможности администрирования
Электронные таблицы
Алгоритм получения доступа к Электронному дневнику
Создание с помощью компьютера схем для вязания
Пакеты в Каталоге
Как влияют социальные сети на обучение
Презентация на тему Влияние интернета на человека
Проектирование базы данных для центра детского общества
Sheykin
Night Magic Glade. Добро пожаловать
Обработка чисел
Графы. Схемы
Происхождение и история объектно-ориентированного программирования. Классы и объекты в действительности и в программах
Создание изображений
Трубичинское сельское поселение
Работа с файловой системой в операционных системах
Базовые типы и операторы языка C#
HTML таблицы+img
7 урок. Представление данных в таблице (1)
ВКР: Технические методы и средства, технологии защиты информации
Антивирус VSafe
FDDI - наиболее подходящая технология для оптоволоконного кабеля
Урок информатики в 7 классе
Архитектура и функционирование вычислительного комплекса Эльбрус-90микро
Автоматический расчет стажей на основании кадровых изменений
Обзор программных продуктов дистрибутива Линукс Юниор