Стратегия (шаблон проектирования): различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
отмена правки 107156763 участника 94.180.160.189 (обс.) вандализм
Метка: отмена
Строка 16:
}}
 
'''Стратегия''' енять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.({{lang-en|Strategy}}) — [[Поведенческие шаблоны проектирования|поведенческий]] [[шаблон проектирования]], предназначенный для определения семейенять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.енять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.ствасемейства [[алгоритм]]ов, [[Инкапсуляция (программирование)|инкапсуляции]] каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путём определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.
 
== Основные характеристики ==
Строка 22:
=== Задача ===
 
По типу клиента (или по типу обрабатываемых данных) выбрать подходящий алгоритм, который следует применить. Если используется правило, которое не подвенять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.ерженоподвержено изменениям, нет необходимости обращаться к шаблону «стратегия».
 
=== Мотивы ===
 
* Программа должна обеспечивать различные варианты алгоритма или поведения
* Нужно изменять поведение кажденять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.огокаждого экземпляра класса
* Необходимо изменять поведение объектов на стадии выполнения
* Введение интерфейса позволяет классам-клиентам ничего не знать о классах, реализующих этот интерфейс и инкапсуленять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.ирующихинкапсулирующих в себе конкретные алгоритмы
 
=== Способ решения ===
Строка 38:
 
* [[Класс (программирование)|Класс]] <code>''Strategy''</code> определяет, как будут использоваться различные алгоритмы.
* Конкретныенять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.еКонкретные классы <code>ConcreteStrategy</code> реализуют эти различные алгоритмы.
* Класс <code>Context</code> использует конкретные классы <code>ConcreteStrategy</code> посредством ссылки на конкретный тип [[Абстрактный класс|абстрактного класса]] <code>''Strategy''</code>. Классы <code>''Strategy''</code> и <code>Context</code> взаимодействуют с целью реализации выбранного алгоритма (в некоторых случаях классу <code>''Strategy''</code> требуется посылать запросы классу <code>Context</code>). Класс <code>Context</code> пересылает классу <code>''Strategy''</code> запрос, поступивший от его класса-клиента.
 
Строка 45:
* Шаблон Strategy определяет семейство алгоритмов.
* Это позволяет отказаться от использования переключателей и/или условных операторов.
* Вызов всех алгоритмов должен осуществленять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.ятьсяосуществляться стандартным образом (все они должны иметь одинаковый интерфейс).
 
=== Реализация ===