首页 > 解决方案 > Java:使用函数式与 OOP 范式

问题描述

我有一个特定的行为,我想在课堂上抽象出来。

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

选项 1:行为可以被“SomeClass”的常规子类化覆盖。

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

“选项 2”中不需要子类化。

问题:(编辑

标签: javafunctional-programmingabstraction

解决方案


虽然选项 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); }
}

推荐阅读