C#接口Interface,接口隔离原则,如何使用接口?
C#接口,即Interface,每个人都很知道它并了解它。
但知道和了解,并不表示,你能把它用好。
实际上,如果看下你身边工作中的同事,包括你自己,回想一下,自己平时写代码所定义的接口多不多?很遗憾,我没有确切的统计数据,根据我个人的经验来看,4年经验以下的程序员,基本不怎么自己编写接口,抽象类甚至也很少。
4年经验以下的程序员,通篇程序,充斥着各种不是public就是private,以及static。此观点代表个人经验,非统计数据。
本文不讲解面向对象,不铺开,所以仅针对接口来说。
回归话题,接口,首先我们回顾一下面向对象的设计原则之一:接口隔离原则。
接口隔离原则,就是要以最小的依赖来创建接口。通常我们一个类,可能会需要实现很多方法,如果将这么多的方法都抽象在同一个接口上,那么就会产生强依赖,不利于扩展。因为别人也会想要用这个接口,但是你在接口中定义了那么多的方法,我只要想实现你的接口,就必须实现你所有的方法,这个依赖性就太强了。所以,接口隔离原则,就是将业务设计进行最小的划分创建各自的接口。
我们以例子说明:
上面的例子是以头条为例简单写的一个类,如果不加以隔离,那么它对应的接口将是这样子的:
此时,如果另一个类A它只需要app列表,然后去做其它事情,那么它继承了这个IByteDance接口,它就不得不实现它所有的方法。而实际上,这个新类A它仅仅需要下面这一个方法就足够了:
如此,就造成了接口依赖性强,强加了各种别人不需要的方法。
那么我们要如何改造这个接口呢?可以按业务设计拆分下面的多个接口:
然后将类ByteDance继承自IByteDance接口:
以上是关于接口的讲解,你学到了吗?
有人会问,什么情况下使用接口?
答:所有的具体实现,都请尽量创建接口。
有人会问,我都不需要接口,直接new一个类实例就行了,用接口既要多写代码,又用不到,多此一举?
答:您需要知道一件事,所有的类,都是具体实现。我们给别人调用的时候,不要公开我们的实现,而且对方也不需要知道你如何实现的细节,只需要开放给他抽象,他知道怎么调用你的方法,你的方法能干什么实现什么功能即可。所以,带有这种思路和想法的都要强迫自己修正,不可以让这种思想指导自己开发。