在我工作的代码库中,我经常看到这个惯用法,基本上是:


  接口->定义获取器/设置器的抽象类->实现


例如:

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。

最佳答案

这不是设计模式。

接口是显而易见的:实现接口的每个类都必须实现其方法-无需提出任何问题。

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

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

看看Joshua Bloch在设计Collection API时如何在java.util包中成功使用此惯用法。

关于java - 这是什么模式/习惯用法?有什么好处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9437012/

10-09 05:39