Patrones de diseño: patrón de estrategia

En el patrón de estrategia, el comportamiento de una clase o su algoritmo se puede cambiar en tiempo de ejecución. Este tipo de patrón de diseño se incluye en el patrón de comportamiento.

En el patrón de estrategia, creamos objetos que representan varias estrategias y un objeto de contexto cuyo comportamiento varía según su objeto de estrategia. El objeto de estrategia cambia el algoritmo de ejecución del objeto de contexto.

Implementación

Vamos a crear una interfaz de estrategia que defina una acción y clases de estrategia concretas implementando la interfaz de estrategia . El contexto es una clase que usa una estrategia.

StrategyPatternDemo , nuestra clase de demostración, utilizará objetos de contexto y estrategia para demostrar el cambio en el comportamiento del contexto en función de la estrategia que implementa o utiliza.

Paso 1

Crea una interfaz.

Strategy.java

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

Paso 2

Crea clases concretas implementando la misma interfaz.

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;
   }
}

Paso 3

Crear clase 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);
   }
}

Etapa 4

Utilice el contexto para ver cambios en el comportamiento cuando cambia su estrategia .

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));
   }
}

Paso 5

Verifique la salida.

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