2012-02-24 44 views
0

我看到这个成语很多代码库我工作中,它基本上是:这是什么模式/成语?有什么好处?

接口 - >实现

例如 - >抽象定义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。

+0

也许'Foo'的继承和抽象? – sll 2012-02-24 19:45:53

回答

0

我认为它的名字是“Abstract Implementation”。你不会把getter和setter放到抽象类中,但是所有接口的实现都可能有共同之处。这个想法是提前通过照顾普通的东西来提供接口的实现。如果实现者想要以完全不同的方式实现内容,那么实现者可能仍然选择不扩展抽象基类。

6

这是不是的设计模式。

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

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

吸气剂和制定者不是重点。任何好的IDE都可以为你生成它们。该功能对于复杂的默认行为更有意义。

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