Стратегия (Strategy) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Диаграмма классов) |
Admin (обсуждение | вклад) (→Пример) |
||
Строка 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 (Политика)
Назначение
Определяет семейство алгоритмов, делает их взаимозаменяемыми
Описание
Жестко зашивать в клиент тот или иной алгоритм плохо: клиент усложняется, сопровождать его труднее.
В зависимости от обстоятельств стоит применять тот или иной алгоритм.
Модификация самого алгоритма проще когда он вынесен в отдельный класс.
Реализация
Диаграмма классов
Участники
Пример
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();
}
}