我正在按照here的策略模式示例

本教程中的所有内容都很清楚,但这是:

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

因此,Context类期望在其构造函数中使用Strategy参数。

策略的定义是:
public interface Strategy {
   public int doOperation(int num1, int num2);
}

上面的类是接口(interface),上下文类期望一个类型为Strategy的对象。在StrategyPatternDemo类中,我们执行以下操作:
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));
   }
}

我非常困惑,因为我们无法根据定义初始化接口(interface):

接口(interface)在某些方面与类有所不同,包括:

您不能实例化接口(interface)。

Context context = new Context(new OperationAdd());作为public Context(Strategy strategy){ this.strategy = strategy; }的参数发送的确切方式

最佳答案

OperationAddOperationSubstractOperationMultiply都实现了Strategy接口(interface)。因此,这些类的实例可以传递到Context的构造函数中,该构造函数需要一个Strategy类型的对象。

由于OperationAddOperationSubstractOperationMultiply实现了Strategy接口(interface),它们都是该类型。

10-06 14:11