軟體架構 介面的使用

2021-07-02 02:48:51 字數 1437 閱讀 2153



有句話說:「面向介面程式設計」,這話沒錯。遺憾的是很多人將這句話曲解了,以為「面向介面程式設計」就是盡量使用介面,處處使用介面,結果造成介面濫用。

「過猶不及」,一種事物都是存在兩個關節點,關節點之間就是度,任何事物,都要把握乙個度的問題。「面向介面程式設計」,其實說的也是乙個度的問題,為了解耦,達到更好的穩定性。同樣,「解耦」,也是一種思路,也存在的度的問題,不能說任何東西都要解耦,處處解耦。如果不把握好這個度,你做的是個整體系統還是滿地零件?

理解概念,不妨如前所述,從字面意思上著手,「介面」,兩個漢字「接」和「口」,接,承接,轉接,連線的意思,口,門戶,開放視窗;介面就是提供連線的開放視窗。既然是介面是提供連線的開放視窗,那麼,它必然要對接多個情況,存在統一接入標準,它的功能必然就是「方便插拔」,「應對變化」。

理解概念,將其放到真實生活中對比,是個不錯的想法,介面,我們可以直觀的模擬電源插座,它是電網連線用電器的介面,它的特點就是方便連線與斷開,凡是符合標準的插頭都可以接入,可以隨意更換用電器,當用電器故障的時候,不至於影響整個電網,實現電網和用電器的解耦,當用電器故障的時候,你只需拔下插頭。

如果使用介面,我們可以從現實的簡單插座的例子得到啟發,介面就是為了應對變化和解耦的,對於沒有變化或者解耦必要的地方,完全沒有必要使用介面。「開閉原則」,除了「開」,還有另外乙個方面,那就是「閉」,過分強調了「開」,而忽略了「閉」,是不符合設計原則的。「對變化開放,對穩定封閉」,「開放」和「封閉」同樣重要。

我們不能處處做介面,處處開放。比如,現實中的乙個例子,就汽車而言,我們是否有必要所有的地方都做成可插拔的?完全沒有必要,對於發動機來說,它就是個緊耦合的東西,任何對發動的機的解耦都可能影響傳送機的效能和安全性,也或者根本不能實現發動的目的。同樣重要的是,沒有必要松耦合,你硬要把發動機做成每個零件可插拔的,不僅達不到最初的設計目的,還會因此耗費大量的人力物力財力。汽車的各個部分,有鬆耦合,有緊耦合,發動機本身相對來說,緊耦合,但是輪胎,傳動器,電路,剎車系統等等,他們之間則是松耦合,相互不會因為故障相互影響。一輛汽車,合理的用了松耦合,緊耦合,才是一輛成功的汽車。同樣,乙個好的軟體,要合理的使用松耦合,緊耦合。我們說linux

作業系統的**是「藝術的**,**的藝術」,但是

linux

作業系統的**是處處緊耦合。

使用介面,是有代價的。一種事物,都具有兩面性,介面在方便插拔的同時,也存在著為了實現這個特性所需要付出的代價。在虛擬機器實現中,類例項呼叫和介面呼叫存在著本質的不同,類的呼叫,在查詢方法表的時候,只需要根據方法表指標偏移量就可以直接找到方法,進行呼叫;但是介面則不是,由於實現介面的類千差萬別,也存在乙個類實現多個介面的情況,那麼每個類的介面方法的位置變得不固定,虛擬機器執行的時候,無法直接根據偏移量確定方法的位置,它必須全表掃瞄方法表,進而確定方法的位置。所以,介面的呼叫比類例項的掉用慢的多。

權衡輕重,在可能出現變化的地方果斷使用介面,在穩定的地方避免使用介面;堅持合理的「開閉」,開和閉同樣重要。介面雖然方便,但是也要在需要的地方使用,而不是隨便的使用。

介面的使用

由於c 類不能多重繼承。但現實有許多多重繼承的情況。為了避免傳統多重繼承帶來的複雜性問題和滿足多重繼承的需要,就提出了介面的概念。介面提出了一種規範,讓使用介面的程式設計人員要遵守其提出的約定。c 中申明介面時,使用關鍵字inte ce。using system using system.colle...

使用介面的好處

1 用介面來引用特定的實現類,而不是用 特定的類來引用自己 list list new arraylist list list new linkedlist 一旦需要改變自己的實現細節,要做的全部事情就是在建立的時候改變它。其餘 可保持原樣 2 用介面來呼叫其實現類的方法 service servi...

java Enumeration介面的使用例子

enumeration介面 enumeration介面本身不是乙個資料結構。但是,對其他資料結構非常重要。enumeration介面定義了從乙個資料結構得到連續資料的手段。例如,enumeration定義了乙個名為nextelement的方法,可以用來從含有多個元素的資料結構中得到的下乙個元素。en...