¿Cómo implementar un patrón de estrategia usando Enum en Java?

El patrón de diseño de la estrategia pretende proporcionar una forma de elegir entre una variedad de estrategias intercambiables. La implementación clásica incluye una arquitectura a implementar por cada técnica y ofrece una implementación concreta para la ejecución. El método se elige de una referencia de interfaz y se llama al método de ejecución.

La implementación clásica del patrón de diseño de la estrategia:

La interfaz de estrategia debe ser implementada por todas las estrategias.

public interface Strategy {
  public void execute();
}

Todas las estrategias deben implementar la interfaz de estrategia dos clases que muestren la implementación de la interfaz de estrategia y creen un método de ejecución.

public class StrategyA implements Strategy {
 @Override
 public void execute(){
   System.out.print("Executing strategy A");
 }
}
public class StrategyB implements Strategy {
 @Override
 public void execute() {
   System.out.print("Executing strategy B");
 }
}

La clase principal seleccionará la estrategia y ejecutará el método de ejecución de la estrategia que elegimos.

public class GFG {

 private Strategy strategy;

 public void setStrategy(Strategy strategy){
   this.strategy = strategy;
 }

 public void executeStrategy(){
   this.strategy.execute();
 }
}

Un ejemplo del uso de la Estrategia.

public class UseStrategy {

public static void main(String[] args){

Context context = new Context();

context.setStrategy(new StrategyA());
context.executeStrategy();

context.setStrategy(new StrategyB());
context.executeStrategy();
}
}

Enum implementación del patrón de diseño de la estrategia:

Tendrá dos clases: una clase de enumeración y una clase que la usa. Toda la magia sucede en la enumeración, donde se realiza la implementación concreta de la estrategia para definir cada constante de enumeración.

Java

// Java program to Implement a Strategy Pattern using Enum
  
enum Strategy {
  
  STRATEGY_A {
    @Override
    void execute() {
      System.out.println("Executing strategy A");
    }
  },
    
  STRATEGY_B {
    @Override
    void execute() {
      System.out.println("Executing strategy B");
    }
  };
  
  abstract void execute();
}
  
  
 class UseStrategy {
  
  public static void main(String[] args)
  {
    UseStrategy useStrategy = new UseStrategy();
    useStrategy.perform(Strategy.STRATEGY_A);
    useStrategy.perform(Strategy.STRATEGY_B);
  }
  
  private void perform(Strategy strategy) {
    strategy.execute();
  }
}
Producción

Executing strategy A
Executing strategy B

Publicación traducida automáticamente

Artículo escrito por sachinchhipa44 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *