Как заменить switch case паттерном стратегия? Просматривал тут вакансии, в одной из них была довольно интересная формулировка примерно такого плана: "Мы ожидаем, что программист будет понимать и активно использовать паттерны проектирования, но без фанатизма. Например, не будет каждый switch case переписывать в стратегию. " Как я понимаю, имелся ввиду одноименный паттерн. Вот мне стало интересно, как им можно заменить switch case. Ветвление ведь для выбора стратегии все равно понадобится. Напримерswitch (x) { case 1: obj.strategy = new Strategy1(); break; case 2: obj.strategy = new Strategy2(); break; } Буду признателен за примеры кода.
Да, в вашем примере вместо switch case можно использовать паттерн стратегия. В данном случае вы можете создать интерфейс Strategy с методом execute, а затем реализовать этот интерфейс в конкретных стратегиях. Затем вы можете передавать объекты конкретных стратегий в объект, который использует стратегию.
Пример:
interface Strategy { void execute(); } class Strategy1 implements Strategy { @Override public void execute() { // реализация стратегии 1 } } class Strategy2 implements Strategy { @Override public void execute() { // реализация стратегии 2 } } class Context { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void executeStrategy() { if (strategy != null) { strategy.execute(); } } } public class Main { public static void main(String[] args) { Context context = new Context(); context.setStrategy(new Strategy1()); context.executeStrategy(); context.setStrategy(new Strategy2()); context.executeStrategy(); } }
В этом примере в зависимости от выбранной стратегии будет вызываться соответствующий метод execute. Это позволяет избежать длинных цепочек switch case и упростить расширение кода за счет добавления новых стратегий без изменения существующего кода.
Да, в вашем примере вместо switch case можно использовать паттерн стратегия. В данном случае вы можете создать интерфейс Strategy с методом execute, а затем реализовать этот интерфейс в конкретных стратегиях. Затем вы можете передавать объекты конкретных стратегий в объект, который использует стратегию.
Пример:
interface Strategy {void execute();
}
class Strategy1 implements Strategy {
@Override
public void execute() {
// реализация стратегии 1
}
}
class Strategy2 implements Strategy {
@Override
public void execute() {
// реализация стратегии 2
}
}
class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
if (strategy != null) {
strategy.execute();
}
}
}
public class Main {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new Strategy1());
context.executeStrategy();
context.setStrategy(new Strategy2());
context.executeStrategy();
}
}
В этом примере в зависимости от выбранной стратегии будет вызываться соответствующий метод execute. Это позволяет избежать длинных цепочек switch case и упростить расширение кода за счет добавления новых стратегий без изменения существующего кода.