Java與設計模式(六)設計原則--接口隔離原則

一、定義

接口隔離原則定義如下:
接口隔離原則(Interface Segregation Principle, ISP):使用多個專門的接口,而不使用單一的總接口,即客戶端不應該依賴那些它不需要的接口。

根據接口隔離原則,當一個接口太大時,我們需要將它分割成一些更細小的接口,使用該接口的客戶端僅需知道與之相關的方法即可。每一個接口應該承擔一種相對獨立的角色,不幹不該乾的事,該乾的事都要幹。這裏的“接口”往往有兩種不同的含義:一種是指一個類型所具有的方法特徵的集合,僅僅是一種邏輯上的抽象;另外一種是指某種語言具體的“接口”定義,有嚴格的定義和結構,比如Java語言中的interface。對於這兩種不同的含義,ISP的表達方式以及含義都有所不同:

  • (1)當把“接口”理解成一個類型所提供的所有方法特徵的集合的時候,這就是一種邏輯上的概念,接口的劃分將直接帶來類型的劃分。可以把接口理解成角色,一個接口只能代表一個角色,每個角色都有它特定的一個接口,此時,這個原則可以叫做“角色隔離原則”。
  • (2)如果把“接口”理解成狹義的特定語言的接口,那麼ISP表達的意思是指接口僅僅提供客戶端需要的行爲,客戶端不需要的行爲則隱藏起來,應當爲客戶端提供儘可能小的單獨的接口,而不要提供大的總接口。

在面向對象編程語言中,實現一個接口就需要實現該接口中定義的所有方法,因此大的總接口使用起來不一定很方便,爲了使接口的職責單一,需要將大接口中的方法根據其職責不同分別放在不同的小接口中,以確保每個接口使用起來都較爲方便,並都承擔某一單一角色。接口應該儘量細化,同時接口中的方法應該儘量少,每個接口中只包含一個客戶端(如子模塊或業務邏輯類)所需的方法即可,這種機制也稱爲“定製服務”,即爲不同的客戶端提供寬窄不同的接口。

說到這裏,很多人會覺的接口隔離原則跟之前的單一職責原則很相似,其實不然。

  • 其一,單一職責原則原注重的是職責;而接口隔離原則注重對接口依賴的隔離
  • 其二,單一職責原則主要是約束類,其次纔是接口和方法,它針對的是程序中的實現和細節;而接口隔離原則主要約束接口,主要針對抽象,針對程序整體框架的構建。

採用接口隔離原則對接口進行約束時,要注意以下幾點:

  • 接口儘量小,但是要有限度。對接口進行細化可以提高程序設計靈活性是不掙的事實,但是如果過小,則會造成接口數量過多,使設計複雜化。所以一定要適度。
  • 爲依賴接口的類定製服務,只暴露給調用的類它需要的方法,它不需要的方法則隱藏起來。只有專注地爲一個模塊提供定製服務,才能建立最小的依賴關係。
  • 提高內聚,減少對外交互。使接口用最少的方法去完成最多的事情。

運用接口隔離原則,一定要適度,接口設計的過大或過小都不好。設計接口的時候,只有多花些時間去思考和籌劃,才能準確地實踐這一原則。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章