1. 程式人生 > 其它 >十年經驗告訴你,如何正確的理解介面

十年經驗告訴你,如何正確的理解介面

這篇也算是店動力——從0到1設計開發進銷存系統的記錄總結的前傳吧,因為在這個系統中大量的使用了介面,所以有必須專門把介面說一下。

說起介面大家都不陌生,尤其對於C#、Java等開發人員來說。
“什麼是介面”,“什麼是抽象類”,“介面和抽象類的相同點及區別”,這些話題大概是面試題中出場率最高的了,面試的人多了,那自然答案也是各種各樣的。

再看下文之前,自己可以先想一想,用自己的語言、自己的工作經驗,把它的本質說一下。

另外,大家也可以把自己的理解說一下,互相探討一番。

我雖然可以一句話就把介面的理解說完,但顯而易見的後果就是:字數太少,無法上到首頁。
因為我也是從一個菜鳥經過這麼多年的經驗慢慢的摸索、理解出來的,基於我對這個行業的熱愛,因此我真的想幫助更多的人快速的成長,也自然想這篇文章上首頁,讓更多的人看到。

社會是在不段進步的,同樣程式語言也是在進步的。早期的c、c++都沒有介面的概念,後面推出的java、c#摒棄了c++的多繼承概念,提出了介面的概念。剛才說了程式語言也是在進步的,因此介面的出現必然要比多繼承好。不是嗎?

說回上面的問題,大部分人在回答什麼是介面、或者介面和抽象類的相同點及區別時,無非是把介面、抽象類的書本中的定義說一下。
可作為面試官的我們想要的答案是你自己對於介面、抽象類的理解,不是書本上的定義。

介面的本質其實是對實現最小功能的定義或者說約束。怎麼理解這句話?
假設你現在要和其它系統之間對接,這時候關心的應該是:需要提供哪些方法及引數的結構,這也就是所謂的面向介面程式設計。
另外一個就是把所有的功能一個介面中,還是放到不同的介面?答案就不用我說了,這個也就是所謂的介面隔離原則:多個專用介面優於一個單一的通用介面

這兩點一定要細品:
想一想C#中的IEnmuerable介面,是不是隻是提供了一個最基本功能的定義?
再想一想List實現的介面有哪些?為什麼要實現這麼多介面?ICollection<T> IEnumerable<T> IList<T> ICollection IEnumerable IList?為了複用

換句話說:介面,它僅僅就是一個功能片段
它可以像搭積木一樣,把多個不同的介面組合在一起,變成一個包含完整功能的類。
另外,在拿到這個類之後,由於它實現了多個介面,那麼這個類就可以應用於多個不同的場景了,即:複用。

介面,僅此而已。