一直认为,合适的示例是学习的最好老师,今天这句话又得到了验证。过去对于针对接口编程未能领会,很大程度上是因为没有遇到合适的说明这个问题的例子,今天终于遇到了。我们先来看看这个例子:
1
//
针对实现编程
2
Dog d
=
new
Dog();
3
d.bark();
4![None.gif](/Images/OutliningIndicators/None.gif)
5
//
针对接口编程
6
Animal animal
=
new
Dog();
7
animal.makeSound();
![None.gif](/Images/OutliningIndicators/None.gif)
2
![None.gif](/Images/OutliningIndicators/None.gif)
3
![None.gif](/Images/OutliningIndicators/None.gif)
4
![None.gif](/Images/OutliningIndicators/None.gif)
5
![None.gif](/Images/OutliningIndicators/None.gif)
6
![None.gif](/Images/OutliningIndicators/None.gif)
7
![None.gif](/Images/OutliningIndicators/None.gif)
![](https://images.cnblogs.com/cnblogs_com/lotusswan/animal.jpg)
当采用针对实现编程方式时,我们必须新建一个具体的Dog类,然后调用bark方法;而采用针对接口编程的方式时,我们可以利用Dog类的构造函数生成一个Animal对象,由于多态性,当Animal对象调用makeSound方法时自然会调用Dog类的方法,从而实现了对bark方法的调用。两种方法殊途同归,然而其效用却并不相同。采用后者时,我们可以更好的实现代码的重用,而且有助于隔离变化,扩展性和灵活性好;采用前者,虽然更加的清晰、明确,但对于每类Animal,即使他们相互之间有很多共同的元素,也必须在他们相应的类中加以实现,完全不能重用代码,更重要的是不能反应出这些Animal的共同特征。