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

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м →‎Источники информации: категоризация
Нет описания правки
Строка 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 определяет семейство алгоритмов.
* Это позволяет отказаться от использования переключателей и/или условных операторов.
* Вызов всех алгоритмов должен осуществлятьсяосуществленять выбранный алгоритм независимо от [[Объект (программирование)|объектов]]-клиентов, которые его используют.яться стандартным образом (все они должны иметь одинаковый интерфейс).
 
=== Реализация ===