接口隔離原則(Interface Segregation Principle)講的是:使用多個專門的接口比使用單一的接口總要好。換言之從一個客戶類的角度來說:框架
一個類對另一個類的依賴性應當是創建在最小接口上的。過於臃腫的接口是對接口的污染。不該該強迫客戶依賴於它不用的方法。spa
接口隔離原則的定義以下:設計
客戶端不該該依賴那些它不須要的接口。接口
另外一種定義方法以下:ip
一旦接口太大,則須要將它分割成一些更細小的接口,使用該接口的客戶端僅須要知道與之相關的方法便可。ci
接口隔離原則是指使用多個專門的接口(抽象類也是接口),而不是使用單一的總接口。每一個接口應該承擔一種相對獨立的角色,很少很多,不幹不應乾的事,該乾的事情都要幹。it
(1)一個接口只表明一個角色,每一個角色都有它特定的一個接口,此時這個原則能夠叫作"角色隔離原則"。io
(2)接口僅僅提供客戶端須要的行爲,即所需的方法,客戶端不須要的行爲則隱藏起來,應當爲客戶提供儘量小的單獨接口,而不是提供大的總結口。程序設計
使用接口隔離原則對接口進行約束時,須要注意如下幾點:class
接口儘可能小,可是要有限度。對接口進行細化能夠提升程序設計的靈活性是不爭的事實,可是若是太小,則會形成接口數量過多,使設計複雜化,因此必定要適度。
爲依賴接口的類定製服務,只暴露給調用的類須要的方法,它不須要的方法則隱藏起來。只有專一地爲一個模塊提供定製服務,才能創建最小依賴關係。
提升內聚,減小對外交互。使接口用最少的方法完成最多的事情。
運用接口隔離原則,必定要適度(類中的接口數量要適度),接口設計的過大或太小都很差,設計接口的時候,只有多花時間去思考和籌劃
才能準確地實踐這一原則。
總結:當客戶類被強迫依賴那些它們不須要的接口時,則這些客戶類不得不受制於這些接口。這無心間就致使了全部客戶類之間的耦合。換句話說,若是一個客戶類依賴了一個類,這個類包含了客戶類不須要的接口,但這些接口是其餘客戶類所須要的,那麼其餘客戶類要求修改這個類時,這個修改也將影響這個客戶類。一般咱們都是儘量的避免這種耦合,因此咱們須要不遺餘力地分離這些接口。
接口隔離原則的含義是:創建單一接口,不要創建龐大臃腫的接口,儘可能細化接口,接口中的方法儘可能少。也就是說咱們要爲各個類創建專門的接口,而不是試圖創建一個很龐大的接口供全部依賴他的類去調用。在程序設計中依賴幾個專用的接口比依賴一個綜合的接口更靈活。接口是設計時對外部設定的「契約」,經過分散定義多個接口,能夠預防外來變動的擴散,提升系統的靈活性和可維護性。
說到這裏,不少人覺的接口隔離原則跟以前的單一職責原則很類似其實否則:
其一,單一職責原則注重的是職責,而接口隔離原則注重對接口依賴的隔離。
其二,單一職責原則主要是約束類,其次纔是接口和方法,它針對的是程序中實現和細節;而接口隔離原則主要約束接口,主要針對抽象,針對程序總體框架的構建。