【问题标题】:What is this pattern/idiom? What are the benefits?这是什么模式/成语?有什么好处?
【发布时间】:2012-03-15 06:32:49
【问题描述】:

我在我工作的代码库中经常看到这个习语,本质上是:

接口 -> 定义 getter/setter 的抽象类 -> 实现

例如:

interface Foo{
    void doSomethingA();
    void doSomethingB();
}

abstract class AbstractFoo implements Foo{
    protected int x;
    protected String y;
    int getX(){ return x;}
    void setX(int x){ this.x = x;}
    String getY(){ return y;}
    void setY(String y){ this.y = y;}
}
//One or more concrete classes extending AbstractFoo

这个有名字吗?我能看到的唯一好处是扩展 AbstractFoo 的类不需要重新实现它们的 getter 和 setter。

【问题讨论】:

  • 也许是Foo的继承和抽象?

标签: java design-patterns idioms


【解决方案1】:

不是一种设计模式。

接口很明显:实现接口的每个类都必须实现其方法 - 没有问题。

如果需要,抽象类可以为每个方法提供默认行为。所以是的,这是为了方便子类开发人员。请记住,编写抽象类的人可能会提供至少一个具体的子类,因此他们会受益。

getter 和 setter 不是重点。任何好的 IDE 都可以为您生成它们。该功能对于复杂的默认行为更有意义。

看看 Joshua Bloch 在设计 Collection API 时如何使用这个成语在 java.util 包中取得巨大成功。

【讨论】:

    【解决方案2】:

    我认为它的名称是“抽象实现”。您不仅可以将 getter 和 setter 放入抽象类,还可以将接口的所有实现可能共有的任何东西放入抽象类中。这个想法是通过提前处理常见的东西来更容易地提供接口的实现。如果实现者想以完全不同的方式实现东西,他们可能仍然选择不扩展抽象基类。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多