1. 程式人生 > >Java 設計模式(十三) 介面隔離原則(ISP)

Java 設計模式(十三) 介面隔離原則(ISP)

介面隔離原則(Interface Segregation Principle)

ISP基本概念

介面

  • 例項介面(Object Interface):一個類的例項物件是對一個型別的事物的描述,這時一種介面。
  • 類介面(Class Interface):Java中interface關鍵定義的介面,也是我們通常理解的狹義的介面

ISP定義

  • 客戶端(模組)不應該依賴它不需要的介面(介面的純粹性)

    一個模組應該依賴它需要的介面,需要什麼介面就提供什麼介面,把不需要的介面剔除掉,那就需要對介面進行細化,保證介面的純潔性

  • 類間的依賴關係應該建立在最小的介面

    同樣強調對介面的細化,那麼介面作為抽象,在建立關係時才能保證純潔性不會被無關的依賴破壞

保證介面純潔性的規範

  • 介面細化

    在不違反單一職責原則(SRP)下,要對介面儘量細化,違背SRP會導致單個模組暴露太多方法(介面中的方法都是publi),很多單一職能的內部介面被暴露。

  • 介面高內聚

    • 高內聚:提高介面、類、模組的處理能力,減少對外的互動。
    • 介面是對外的承諾,承諾越少對系統的開發越有利,變更的風險也更小,同時也有利於降低成本。
  • 模組服務定製

    為了減少模組間的耦合,可以對模組間的類似功能分別定製服務(不共用介面,而是使用專門的介面)

保證介面原子性的規範

  • 一個介面只服務一個子模組業務邏輯
  • 通過優化業務邏輯壓縮public方法

介面的粒度太小,會導致介面額數量劇增,對開發人員不友好;介面額粒度太大,靈活性降低,無法提供定製服務,給整體專案帶來無法預估的風險。

例講ISP

定義一個場景,也就是你找工作的時候,簡歷的篩選,人具有特異性,如果介面的粒度過大,會導致可能無法讓A的技能完整呈現,或者不得不吹牛而保證自己所有的技能都被涉及(因為粒度不夠細化),也可能分的介面細度過於大,填簡歷和寫一本書一樣的成本,那哪裡還會有人來應聘,去賣書不好嗎~就不實現了,完全沒有任何程式碼難度…….

往往介面的粒度合適不合適和場景是密切相關的,這就要看設計者的能力了,一些設計模式的廣泛應用也和他們的介面設計的恰到好處有關係。