美文网首页
Effective Java - 接口优于抽象类

Effective Java - 接口优于抽象类

作者: DZQANN | 来源:发表于2022-05-29 22:57 被阅读0次

    使用接口的好处

    1. 现有的类可以很容易被更新,以实现新的接口。

      只需要添加新的方法,并且implements新接口即可

    2. 接口是定义混合类型(mixin)的理想选择。

    3. 接口允许我们构造非层次结构的类型框架。

      public interface Singer {
        AudioClip sing(Song s);
      }
      
      public interface Songwriter {
        Song compose(int chartPotision);
      }
      

      如果需要同时是歌唱家和作曲家,如果是接口则只需要同时implements Singer, Songwriter

    4. 接口可以更安全有力地增强功能(组合优于继承)

    模板方法可以将接口和抽象类的优势结合起来

    1. 接口负责定义类型,以及缺省方法(default方法),模板负责实现除了基本方法外的其它方法
    2. 对于接口的大多数实现来讲,扩展骨架实现类是个很显然的选择,但并不是必需的。如果类无法扩展骨架实现类,这个类始终可以手工实现这个接口
    3. 不能为Object方法(equalshashcode)等提供缺省方法

    思考

    1. 模板方法是开发中经常会用到的设计模式。应该考虑尽量为抽象类的public方法抽出来接口,所有的其它依赖,都应该依赖接口而不是抽象类。我们不能保证这个接口的所有实现都要走抽象的模板,接口更加适合作为类或者方法的依赖。

      这一点在之前的Code Review讲GEO的copy paste中提到过。对于输入,分别按照code->层级匹配->name exact match -> name fuzzy match的顺序,可以将输入->查询结果的过程作为一个接口,common流程作为抽象类,code、name具体的SQL可以作为实现。而层级匹配不能简单用抽象类框架实现,则可以自己实现接口,最后的update结果方法直接依赖接口

    2. 抽象类相比于接口,最大的有点是适合迭代演变。对于新添加public方法的case来讲,抽象类只需要在基类上添加出public方法以及实现即可,而接口如果不能提供default实现,则几乎不能在当前接口上新添加方法。

    相关文章

      网友评论

          本文标题:Effective Java - 接口优于抽象类

          本文链接:https://www.haomeiwen.com/subject/iquaprtx.html