面向物件原則之一 介面隔離原則
前言
面向物件有人分為五大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則。
也有人分為六大原則,分別為單一職責原則、開放封閉原則、依賴倒置原則、介面隔離原則、里氏替換原則、迪米特法則。
現在我們來介紹介面隔離原則
介面隔離原則
1)概念
客戶端不應該依賴它不需要的介面。一個類對另一個類的依賴應該建立在最小的介面上。
怎麼理解呢?通俗一點就是說介面儘量細分,把不需要的方法儘量寫在2個不同的介面上。
假如我有一個介面Interface1,有5個方法。其中Class1想實現第1-3個方法,Class2想實現第3-5個方法。
那麼我只有一個Interface1,如果達到上面的要求,Class1與Class2只能實現Interface1的5個方法,如下:
那麼就變得很臃腫了。有什麼解決辦法呢?介面分離原則很好地解決了以上方法。
我們把Interface1分離3個介面,然後Class1與Class2分別繼承對應的介面,如下:
這樣,很好的消除了冗餘。
2)深入瞭解
介面隔離原則的含義是:建立單一介面,不要建立龐大臃腫的介面,儘量細化介面,介面中的方法儘量少。也就是說,我們要為各個類建立專用的介面,而不要試圖去建立一個很龐大的介面供所有依賴它的類去呼叫。本文例子中,將一個龐大的介面變更為3個專用的介面所採用的就是介面隔離原則。在程式設計中,依賴幾個專用的介面要比依賴一個綜合的介面更靈活。介面是設計時對外部設定的“契約”,通過分散定義多個介面,可以預防外來變更的擴散,提高系統的靈活性和可維護性。
說到這裡,很多人會覺的介面隔離原則跟之前的單一職責原則很相似,其實不然。其一,單一職責原則原注重的是職責;而介面隔離原則注重對介面依賴的隔離。其二,單一職責原則主要是約束類,其次才是介面和方法,它針對的是程式中的實現和細節;而介面隔離原則主要約束介面介面,主要針對抽象,針對程式整體框架的構建。
採用介面隔離原則對介面進行約束時,要注意以下幾點:
- 介面儘量小,但是要有限度。對介面進行細化可以提高程式設計靈活性是不掙的事實,但是如果過小,則會造成介面數量過多,使設計複雜化。所以一定要適度。
- 為依賴介面的類定製服務,只暴露給呼叫的類它需要的方法,它不需要的方法則隱藏起來。只有專注地為一個模組提供定製服務,才能建立最小的依賴關係。
- 提高內聚,減少對外互動。使介面用最少的方法去完成最多的事情。
運用介面隔離原則,一定要適度,介面設計的過大或過小都不好。設計介面的時候,只有多花些時間去思考和籌劃,才能準確地實踐這一原則。
3)生活中例子
比如,我們身邊的手機,有打電話、支付、攝影、聊天、玩遊戲功能。
我們可以定義一個介面IPhoneOperation來說明這些功能。這樣臃不臃腫,要看業務邏輯。
我們現在定一個業務邏輯,把手機功能分成業餘娛樂、生活支付、工作電話。可以拆分介面分別為:
拆分各種介面後,在業務層面我們更加容易地瞭解各自的業務功能實現;在程式碼層面我們更加的高內聚,低耦合。
其他連結: