接口是定义混合类型的理想工具。所为混合类型,就是在一个类的主类型之外的次要类型。一个混合类型表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
联合使用接口和抽象类:
由于抽象类具有提供缺省实现的优点,而接口具有其他所有优点,所以联合使用两者就是一个很好的选择。首先,声明类型的工作仍然由接口承担,但是同时给出的还有一个抽象类,以给出一个缺省实现。其他同属于这个抽象类型的具体类可以选择实现这个接口,也可以选择继承自这个抽象类。如果一个具体类直接实现这个接口的话,它就必须自行实现所有的接口;相反,如果它继承自抽象类的话,它可以省去实现一些方法,因为它可以从抽象类中自动得到这些方法的缺省实现;如果需要向接口加入一个新的方法,那么只要向这个抽象类加入这个方法的一个具体实现就可以了,因为所有继承自这个抽象类的子类都会从这个抽象类得到这个具体方法。这其实就是缺省适配器模式(Default Adapter).
依赖倒置原则DIP告诉我们:应该优先依赖于抽象类,而避免依赖于具体类。其中的原因就在于:这些具体类有可能会改变。但是,如果这个具体类是稳定的,那么依赖它就不会出现麻烦。