Java 設計模式(十三) 介面隔離原則(ISP)
阿新 • • 發佈:2019-02-11
介面隔離原則(Interface Segregation Principle)
ISP基本概念
介面
- 例項介面(Object Interface):一個類的例項物件是對一個型別的事物的描述,這時一種介面。
- 類介面(Class Interface):Java中interface關鍵定義的介面,也是我們通常理解的狹義的介面
ISP定義
客戶端(模組)不應該依賴它不需要的介面(介面的純粹性)
一個模組應該依賴它需要的介面,需要什麼介面就提供什麼介面,把不需要的介面剔除掉,那就需要對介面進行細化,保證介面的純潔性
類間的依賴關係應該建立在最小的介面上
同樣強調對介面的細化,那麼介面作為抽象,在建立關係時才能保證純潔性不會被無關的依賴破壞
保證介面純潔性的規範
介面細化
在不違反單一職責原則(SRP)下,要對介面儘量細化,違背SRP會導致單個模組暴露太多方法(介面中的方法都是publi),很多單一職能的內部介面被暴露。
介面高內聚
- 高內聚:提高介面、類、模組的處理能力,減少對外的互動。
- 介面是對外的承諾,承諾越少對系統的開發越有利,變更的風險也更小,同時也有利於降低成本。
模組服務定製
為了減少模組間的耦合,可以對模組間的類似功能分別定製服務(不共用介面,而是使用專門的介面)
保證介面原子性的規範
- 一個介面只服務一個子模組或業務邏輯
- 通過優化業務邏輯壓縮public方法
介面的粒度太小,會導致介面額數量劇增,對開發人員不友好;介面額粒度太大,靈活性降低,無法提供定製服務,給整體專案帶來無法預估的風險。
例講ISP
定義一個場景,也就是你找工作的時候,簡歷的篩選,人具有特異性,如果介面的粒度過大,會導致可能無法讓A的技能完整呈現,或者不得不吹牛而保證自己所有的技能都被涉及(因為粒度不夠細化),也可能分的介面細度過於大,填簡歷和寫一本書一樣的成本,那哪裡還會有人來應聘,去賣書不好嗎~就不實現了,完全沒有任何程式碼難度…….