java - 这个模式/习语是什么?有什么好处?

标签 java design-patterns idioms

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

Interface -> Abstract class that defines getters/setters -> Implementations

例如:

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。

最佳答案

不是一种设计模式。

接口(interface)是显而易见的:每个实现接口(interface)的类都必须实现其方法 - 毫无疑问。

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

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

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

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

相关文章:

Java 小程序可以在 IDE 中运行,但不能在浏览器中运行

scala - 什么是 "functional way"以避免将状态选择上下文向下传递到调用堆栈?

idioms - 特定于编程领域, "Turtles all the way down"是什么意思?

ruby - 在 ruby​​ 中使用 block 设置变量

java - 从命令行获取java进程的 "user.dir"系统属性

java - 简单XML : ConstructorException

java - 具有附加功能的装饰器模式

c - 用 C 语言打印样式

java - Junit 与 HSQL/H2 一起使用,无需 Spring/Hibernate

android - 谷歌地图中使用的模式名称 > 滚动后的 Activity 变为全屏 Activity