只要一个方法操作的是类而非接口,那么你就只能使用这个类及其子类。达不到过完全解耦地目的。如果你想要将这个方法应用于不在此继承机构中的某个类,那么你就会触霉头了。接口可以在很大程度上放宽这种限制,因此,它使得我们可以编写可复用性更好的代码。
一、 能够向上转型为多个基类型(以及由此带来的灵活性)。
二、与使用抽象基类相同:防止客户端程序员创建该类的对象,确保这仅仅是建立一个接口
如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口(恰当的原则应该是优先选择类而不是接口。从类开始,如果接口的必需性变得非常明确,那么就进行重构)。让方法接受接口类型,是一种让任何类都可以对该方法进行适配的方式。这就是使用接口而不是类的强大之处。任何抽象性都应该是应真正的需求而产生的。当必须时,你应该重构接口而不是到处添加额外级别的间接性。
根据方法所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。这类方法包含所要执行的算法中固定不变的部分,而策略包含变化的部分。策略就是传递进去的参数对象。