首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个模式/习语是什么?有什么福利待遇?

这个模式/习语是什么?有什么福利待遇?
EN

Stack Overflow用户
提问于 2012-02-24 19:42:56
回答 2查看 271关注 0票数 0

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

接口->抽象类,定义getter/setters ->实现

例如:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2012-02-24 19:47:36

这不是设计模式。

接口是显而易见的:每个实现接口的类都必须实现它的方法--不问任何问题。

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

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

看看约书亚·布洛赫在设计集合API时是如何在java.util包中使用这个成语来取得巨大成功的。

票数 6
EN

Stack Overflow用户

发布于 2012-02-24 19:46:20

我认为它的名字是“抽象实现”。您不只是将getter和setter放入抽象类,而是将接口的所有实现都可能具有相同之处。这样做的目的是通过预先处理常见的内容来更容易地提供接口的实现。如果实现者想以一种完全不同的方式实现这些东西,他们可能仍然选择不扩展抽象基类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9437012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档