Padrões de projeto - padrão de estratégia

No padrão Strategy, o comportamento de uma classe ou seu algoritmo pode ser alterado em tempo de execução. Este tipo de padrão de projeto está incluído no padrão de comportamento.

No padrão Strategy, criamos objetos que representam várias estratégias e um objeto de contexto cujo comportamento varia de acordo com seu objeto de estratégia. O objeto de estratégia muda o algoritmo de execução do objeto de contexto.

Implementação

Vamos criar uma interface de Estratégia definindo uma ação e classes de estratégia concretas implementando a interface de Estratégia . Context é uma classe que usa uma estratégia.

StrategyPatternDemo , nossa classe demo, usará objetos Context e Strategy para demonstrar a mudança no comportamento do Context com base na estratégia que ele implementa ou usa.

Passo 1

Crie uma interface.

Strategy.java

public interface Strategy {
   public int doOperation(int num1, int num2);
}

Passo 2

Crie classes concretas implementando a mesma interface.

OperationAdd.java

public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}

OperationSubstract.java

public class OperationSubstract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}

OperationMultiply.java

public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}

etapa 3

Crie uma classe de contexto .

Context.java

public class Context {
   private Strategy strategy;

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

   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}

Passo 4

Use o Contexto para ver a mudança no comportamento quando ele muda sua Estratégia .

StrategyPatternDemo.java

public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());		
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationSubstract());		
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationMultiply());		
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

Etapa 5

Verifique a saída.

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50