使用接口的好处
-
现有的类可以很容易被更新,以实现新的接口。
只需要添加新的方法,并且
implements
新接口即可 -
接口是定义混合类型(mixin)的理想选择。
-
接口允许我们构造非层次结构的类型框架。
public interface Singer { AudioClip sing(Song s); } public interface Songwriter { Song compose(int chartPotision); }
如果需要同时是歌唱家和作曲家,如果是接口则只需要同时
implements Singer, Songwriter
-
接口可以更安全有力地增强功能(组合优于继承)
模板方法可以将接口和抽象类的优势结合起来
- 接口负责定义类型,以及缺省方法(
default
方法),模板负责实现除了基本方法外的其它方法 - 对于接口的大多数实现来讲,扩展骨架实现类是个很显然的选择,但并不是必需的。如果类无法扩展骨架实现类,这个类始终可以手工实现这个接口
- 不能为
Object
方法(equals
、hashcode
)等提供缺省方法
思考
-
模板方法是开发中经常会用到的设计模式。应该考虑尽量为抽象类的
public
方法抽出来接口,所有的其它依赖,都应该依赖接口而不是抽象类。我们不能保证这个接口的所有实现都要走抽象的模板,接口更加适合作为类或者方法的依赖。这一点在之前的Code Review讲GEO的copy paste中提到过。对于输入,分别按照code->层级匹配->name exact match -> name fuzzy match的顺序,可以将输入->查询结果的过程作为一个接口,common流程作为抽象类,code、name具体的SQL可以作为实现。而层级匹配不能简单用抽象类框架实现,则可以自己实现接口,最后的update结果方法直接依赖接口
-
抽象类相比于接口,最大的有点是适合迭代演变。对于新添加
public
方法的case来讲,抽象类只需要在基类上添加出public
方法以及实现即可,而接口如果不能提供default
实现,则几乎不能在当前接口上新添加方法。
网友评论