接口分為兩種:
- 實例接口(Object Interface),在Java中聲明一個類,然后用
new
關鍵詞產生一個實例,它是對一個類型的事物的描述,這是一種接口,比如你定義Person這個類,然后使用Person zhangSan = new Person()
產生了一個實例,這個實例要遵從的標準就是Person這個類,Person類就是zhangSan的接口,類也是一種接口
。 - 類接口(Class Interface),Java中經常使用
interface
關鍵詞字義的接口。
接口隔離原則(ISP)的定義:
- 客戶端不應該依賴它不需要的接口。
- 類間的依賴關系應該建立在最小的接口上。
建立單一接口,不要建立臃腫龐大的接口。接口盡量細化,同時接口中的方法盡量少。
接口隔離原則是對接口進行規范約束,其包含以下4層含義:
- 接口要盡量小
根據接口隔離原則拆分接口時,首先必須滿足單一職責原則。 - 接口要高內聚
高內聚就是提高接口、類、模塊的處理能力,減少對外的交互。要求在接口中盡量少公布public
方法,接口是對外的承諾,承諾越少對系統的開發越有利,變更的風險也就越少,同時也有利于降低成本。 - 定制服務
一個系統或系統內的模塊之間必然會有耦合,有耦合就要有相互訪問的接口(并不一定就是Java中定義的Interface,也可能是一個類或單純的數據交換),我們設計時就需要為各個訪問者定制服務。定制服務就是單獨為一個個體提供優良的服務。我們在做系統設計時也需要考慮對系統之間或模塊之間的接口采用定制服務。采用定制服務就必然要有一個要求:只提供給訪問者需要的方法。 - 接口設計是有限度的
接口的設計粒度越小,系統越靈活,這是不爭的事實。但是,靈活的同時也帶來了結構的復雜化,開發難度增加,可維護性降低。所以接口設計一定要注意適度。
接口隔離原則是對接口的定義,同時也是對類的定義,接口和類盡量使用原子接口或原子類來組裝。但是,這個原子該怎么劃分是設計模式中的一大難題,在實踐中可以根據以下幾個規則來衡量:
- 一個接口只服務于一個子模塊或業務邏輯。
- 通過業務邏輯壓縮接口中的
public
方法,接口時常去回顧,盡量讓接口達到最小。 - 已經被們污染了的接口,盡量去修改,若變更的風險較大,則采用適配器模式進行轉化處理。
- 了解環境,拒絕肓從。每個項目或產品都有特定的環境因素,環境不同,接口拆分的標準就不同。