📜  如何在Java使用 Enum 实现策略模式?

📅  最后修改于: 2021-10-28 02:53:16             🧑  作者: Mango

策略设计模式旨在提供一种从各种可互换策略中进行选择的方法。经典实现包括每个技术要实现的架构,并提供具体的执行实现。从接口引用中选择方法,并调用执行方法。

策略设计模式的经典实现:

策略接口必须被所有策略实现。

public interface Strategy {
  public void execute();
}

所有策略都必须实现策略接口两个类,显示策略接口的实现并创建了一个执行方法。

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

主类会选择策略并执行我们选择的策略的execute方法。

public class GFG {

 private Strategy strategy;

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

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

使用策略的示例。

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

策略设计模式的枚举实现:

它将有两个类:一个枚举类和一个使用它的类。所有的魔法都发生在枚举中,在那里完成策略的具体实现来定义每个枚举常量。

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


输出
Executing strategy A
Executing strategy B