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

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Диаграмма классов)
(Пример)
Строка 21: Строка 21:
  
 
=== Пример ===
 
=== Пример ===
 +
<source lang="Csharp">
 +
interface Strategy
 +
{
 +
    void Operation();
 +
}
 +
 +
class ConcreteStrategyA : Strategy
 +
{
 +
    public void Operation()
 +
    {
 +
        // ...
 +
    }
 +
}
 +
 +
class ConcreteStrategyB : Strategy
 +
{
 +
    public void Operation()
 +
    {
 +
        // ...
 +
    }
 +
}
 +
 +
class ConcreteStrategyC : Strategy
 +
{
 +
    public void Operation()
 +
    {
 +
        // ...
 +
    }
 +
}
 +
 +
class Context
 +
{
 +
    Strategy strategy;
 +
 +
    public Context(Strategy strategy)
 +
    {
 +
        this.strategy = strategy;
 +
    }
 +
 +
    public void PerformOperation()
 +
    {
 +
        strategy.Operation();
 +
    }
 +
}
 +
</source>
  
 
=== Достоинства и недостатки ===
 
=== Достоинства и недостатки ===

Версия 19:21, 22 июля 2014

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

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

Policy (Политика)

Назначение

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

Описание

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

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

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

Реализация

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

StrategyCommon.png

Участники

Пример

interface Strategy
{
    void Operation();
}

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

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

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

class Context
{
    Strategy strategy;

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

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

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

Варианты