Стратегия (Strategy) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Участники)
(Участники)
Строка 18: Строка 18:
  
 
==== Участники====
 
==== Участники====
* StrategyClient - содержит ссылку на текущий экземпляр класса Strategy и имеет метод для замены текущего экземпляра другим
+
* '''StrategyClient''' - содержит ссылку на текущий экземпляр класса Strategy и имеет метод для замены текущего экземпляра другим
* Strategy - интерфейс, определяющий заголовки алгоритмов
+
* '''Strategy''' - интерфейс, определяющий заголовки алгоритмов
* ConcreteStrategy - классы, реализующие интерфейс Strategy для определения конкретных алгоритмов
+
* '''ConcreteStrategy''' - классы, реализующие интерфейс Strategy для определения конкретных алгоритмов
  
 
=== Пример ===
 
=== Пример ===

Версия 20:31, 22 июля 2014

К основной странице курса

Другое название

Policy (Политика)

Назначение

Определяет семейство алгоритмов, делает их взаимозаменяемыми

Описание

Жестко зашивать в клиент тот или иной алгоритм плохо: клиент усложняется, сопровождать его труднее.

В зависимости от обстоятельств стоит применять тот или иной алгоритм.

Модификация самого алгоритма проще когда он вынесен в отдельный класс.

Реализация

Диаграмма классов

StrategyCommon.png

Участники

  • StrategyClient - содержит ссылку на текущий экземпляр класса Strategy и имеет метод для замены текущего экземпляра другим
  • Strategy - интерфейс, определяющий заголовки алгоритмов
  • ConcreteStrategy - классы, реализующие интерфейс Strategy для определения конкретных алгоритмов

Пример

interface Strategy
{
    void Operation();
}

class ConcreteStrategyA : Strategy
{
    public void Operation()
    {
        // ...
    }
}

class ConcreteStrategyB : Strategy
{
    public void Operation()
    {
        // ...
    }
}

class ConcreteStrategyC : Strategy
{
    public void Operation()
    {
        // ...
    }
}

class StrategyClient
{
    Strategy strategy;

    public Context(Strategy strategy)
    {
        this.strategy = strategy;
    }

    public void PerformOperation()
    {
        strategy.Operation();
    }
}

Достоинства и недостатки

  • При добавлении новых типов алгоритмов приложение просто расширяется, т.к. нет необходимости переписывать код всего приложения.
  • Можно заменить алгоритм динамически во время выполнения приложения.
  • Паттерн Стратегия позволяет обойтись без оператора switch по типу алгоритма в коде.
  • Недостаток: для разных алгоритмов могут быть разное количество начальных параметров

Варианты