Java:使用函数式与 OOP 范式

Java : Using Functional Vs OOP Paradigms

我有一个特定的行为,我想在我的 class 中抽象出来。

我看到有两种方法可以做到这一点。

选项 1:该行为可以被 'SomeClass'.

的常规子class覆盖
Class SomeCalss{
  public Output behaviour(Input){
    //overriden behaviour
  }
}

Class SomeOtherClass extends SomeCalss{
  public Output behaviour(Input){
    //overriden behaviour
  }
}

选项 2:可以通过从外部插入功能定义来指定行为

Class SomeCalss{
  public Output behaviour(Function<Input,Output> function, Input){
    //Functional paradigm
  }
}

在 'Option 2' 中不需要 Subclassing。

问题:(编辑

虽然选项 2 为您提供了灵活性,但它会强制客户端代码指定 Function 参数,您可能希望避免这种情况。

您的目标是为客户端提供一个简单的界面(行为(输入))并尽可能隐藏所有内容 - 以便客户端独立于您的代码。

选项 3 是

interface Behaves { public Output behaviour(Input i); }
class Behaviour1 implements Behaves {
  public Output behaviour(Input i){ /* your implementation here*/ }
}
class FunctionBasedBehaviour implements Behaves {
  private final Function<Input,Output> f;
  public FunctionBasedBehaviour (Function<Input,Output> f) {this.f=f;}
  public Output behaviour(Input i){  return f(i); }
}