Статьи

Шаблоны проектирования: стратегия

На этот раз я хочу поговорить о шаблоне проектирования стратегии . Таким образом, я начинаю статьи о поведенческих шаблонах дизайна . Шаблоны такого типа представляют некоторые схемы взаимодействия между объектами, чтобы сделать код более гибким и хорошо организованным. Наиболее важным моментом этого подхода является слабая связь между объектами.

Стратегия должна использоваться, когда у вас есть несколько реализаций для одной цели в вашем приложении. В этом случае вы создаете интерфейс стратегии, конкретные реализации интерфейса и, наконец, класс контекста, который будет инкапсулировать всю логику в некоторых методах. Чтобы понять этот подход, давайте рассмотрим пример.

Пример будет основан на футболе. Давайте представим, что любая футбольная команда может играть двумя способами: атаковать и защищаться. Эти две тактики являются частной реализацией футбольной стратегии.

Стратегия-Дизайн-шаблон

Интерфейс стратегии:

1
2
3
4
5
public interface FootballStrategy {
 
    public void adhereTactic(String team);
 
}

Конкретные реализации:

1
2
3
4
5
6
7
8
public class AttackTactic implements FootballStrategy {
 
    @Override
    public void adhereTactic(String team) {
        System.out.println(team+" will play in attacking football!");
    }
 
}

И

1
2
3
4
5
6
7
8
public class DefenceTactic implements FootballStrategy {
 
    @Override
    public void adhereTactic(String team) {
        System.out.println(team+" will make emphasis on defence!");
    }
 
}

Контекстный класс:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public class TacticContext {
 
    private FootballStrategy strategy = null;
 
    public void selectTactic(String team) {
        strategy.adhereTactic(team);
    }
 
    public FootballStrategy getStrategy() {
        return strategy;
    }
 
    public void setStrategy(FootballStrategy strategy) {
        this.strategy = strategy;
    }
 
}

Демонстрация использования Стратегии:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
...
    public static void main(String[] args) {
 
        String team1 = "Barcelona";
        String team2 = "Real Madrid";
 
        TacticContext context = new TacticContext();
 
        context.setStrategy(new AttackTactic());
        context.selectTactic(team1);
 
        context.setStrategy(new DefenceTactic());
        context.selectTactic(team2);
 
    }
...

Результат выполнения кода:

Барселона сыграет в атакующий футбол!
Реал Мадрид сделает упор на оборону!

Когда использовать шаблон дизайна Стратегии? Определенно, когда клиенту не нужно знать о реализации конкретных стратегий или о данных, которые там используются. Когда вы хотите использовать один класс из набора динамически. Я не знаю, какие ситуации мне также нужно упомянуть сейчас. Но я уверен, что мой пример был многословным, и вы можете сделать свой собственный вывод о плюсах и минусах шаблона проектирования Стратегии.

Ссылка: Шаблоны проектирования: стратегия от нашего партнера по JCG Алексея Зволинского в блоге Фрузенштейна .