Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.
Результаты применения паттерна Singleton
Достоинства паттерна Singleton
- Класс сам контролирует процесс создания единственного экземпляра. - Паттерн легко адаптировать для создания нужного числа экземпляров. - Возможность создания объектов классов, производных от Singleton. Недостатки паттерна Singleton
В случае использования нескольких взаимозависимых одиночек их реализация может резко усложниться.
Поведенческие шаблоны Стратегия (Strategy) Стратегия — поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов клиентов, которые его используют.
Проблема: по типу клиента (или по типу обрабатываемых данных) выбрать подходящий алгоритм, который следует применить. Если используется правило, которое не подвержено изменениям, нет необходимости обращаться к шаблону «стратегия». Решение: отделение процедуры выбора алгоритма от его реализации. Это позволяет сделать выбор на основании контекста.
- Класс Strategy определяет, как будут использоваться различные алгоритмы. - Конкретные классы ConcreteStrategy реализуют эти различные алгоритмы. - Класс Context использует конкретные классы ConcreteStrategy посредством ссылки на конкретный тип абстрактного класса Strategy. - Классы Strategy и Context взаимодействуют с целью реализации выбранного алгоритма (в некоторых случаях классу Strategy требуется посылать запросы классу Context). - Класс Context пересылает классу Strategy запрос, поступивший от его класса клиента.
Этот паттерн инкапсулирует семейство алгоритмов, делая их взаимозаменяемыми. Применять его целесообразно в следующих случаях: • Имеются родственные классы, отличающеюся только поведением. Стратегия позволяет гибко конфигурировать класс, задавая одно из возможных поведений; • Требуется иметь несколько разных вариантов алгоритма. Например, можно определить два варианта алгоритма, один из которых требует больше времени, а другой — больше памяти. Кроме того, с помощью стратегии легко определить поведение класса по умолчанию.
Варианты алгоритмов могут быть реализованы в виде иерархии классов, что позволяет вычленить общую для всех классов функциональность. Инкапсулированные алгоритмы можно затем применять в разных контекстах; • в алгоритме хранятся данные, о которых клиент не должен «знать». Стратегия позволяет не раскрывать сложные, специфичные для алгоритма структуры данных; • в классе определено много вариантов поведения, что представлено разветвленными условными операторами. В этом случае проще перенести код из ветвей в отдельные классы стратегий. Структура паттерна приведена на рис. Паттерн состоит из следующих классов: • Strategy (стратегия) объявляет общий для всех поддерживаемых алгоритмов интерфейс. Класс Context пользуется этим интерфейсом для вызова конкретного алгоритма, определенного в классе ConcreteStrategy; • ConcreteStrategy (конкретная стратегия) — наследник класса Strategy. Реализует алгоритм, использующий интерфейс, объявленный в классе Strategy; • Context (контекст) конфигурируется объектом класса ConcreteStrategy. Хранит ссылку на объект класса Strategy и может определять интерфейс, который позволяет объекту Strategy получить доступ к данным контекста. Таким образом, объект Context делегирует реализацию конкретного алгоритма поведения объекту Strategy, что дает возможность гибко изменять поведение объекта. #include <iostream> Class Strategy { public: virtual ~Strategy() {} virtual void use(void) = 0; }; class Strategy_1: public Strategy { public: void use(void){ std::cout << "Strategy_1" << std::endl; }; }; class Strategy_2: public Strategy { public: void use(void){ std::cout << "Strategy_2" << std::endl; }; }; class Strategy_3: public Strategy { public: void use(void){ std::cout << "Strategy_3" << std::endl; }; }; Class Context { protected: Strategy* operation; public: virtual ~Context() {} virtual void useStrategy(void) = 0; virtual void setStrategy(Strategy* v) = 0; };
|
|||||
Последнее изменение этой страницы: 2021-11-27; просмотров: 47; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.74.55 (0.009 с.) |