ef提出三个优先使用接口的原因:
- 现有的类可以很容易地被更新,以实现新的接口。
- 接口是定义mixin(混合类型)的理想选择。
- 接口允许我们构造非层次结构的类型框架。
假设有一个接口代表singer,另一个接口代表songwriter。
public interface Singer(){
AudioClip sing(Song s);
}
public interface Songwriter(){
Song compose(boolean hit);
}
则当我们要表达一个Person是歌唱家,作曲家,歌唱家兼作曲家时会非常方便,各取所需。而如果是用抽象类,复杂程度可以想象。
在学习代理这一块知识点时,如果代理类的原生类没有实现某个接口则只能使用cglib代理,而实现了接口则可以使用jdk代理,按照spring的做法,是优先使用jdk代理,其次才是cglib代理,可见一斑吧,但是还没有研究为什么如此抉择。
MVC设计模式中也是大量使用接口设计,主要是结合反射,可以很方便的更改系统实现。