针对接口编程

     针对接口编程,而不要针对实现编程,老生常谈呢。不过在今天之前,我却并未能领悟其道理;即使在今天,我也未必完全掌握了这句话的精髓。
     一直认为,合适的示例是学习的最好老师,今天这句话又得到了验证。过去对于针对接口编程未能领会,很大程度上是因为没有遇到合适的说明这个问题的例子,今天终于遇到了。我们先来看看这个例子:
1//针对实现编程
2Dog d= new Dog();
3d.bark();
4
5//针对接口编程
6Animal animal=new Dog();
7animal.makeSound();
     其中针对接口编程部分的各个类之间的关系图如下所示:

     当采用针对实现编程方式时,我们必须新建一个具体的Dog类,然后调用bark方法;而采用针对接口编程的方式时,我们可以利用Dog类的构造函数生成一个Animal对象,由于多态性,当Animal对象调用makeSound方法时自然会调用Dog类的方法,从而实现了对bark方法的调用。两种方法殊途同归,然而其效用却并不相同。采用后者时,我们可以更好的实现代码的重用,而且有助于隔离变化,扩展性和灵活性好;采用前者,虽然更加的清晰、明确,但对于每类Animal,即使他们相互之间有很多共同的元素,也必须在他们相应的类中加以实现,完全不能重用代码,更重要的是不能反应出这些Animal的共同特征。
posted @ 2005-09-06 20:18  Articles about .NET  阅读(1126)  评论(4编辑  收藏  举报