物件導向設計原則總結
單一職責原則(SRP)
不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。 問題由來:類T負責兩個不同的職責:職責P1,職責P2。當由於職責P1需求發生改變而需要修改類T時,有可能會導致原本執行正常的職責P2功能發生故障。
一句話總結:不能為圖程式碼量少,把牛頭馬嘴一起往一個類塞
里氏替換原則(LSP)
-
子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。
-
子類中可以增加自己特有的方法。
-
當子類的方法過載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入引數更寬鬆。
-
當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。
一句話總結:儘量不要重寫父類的已經實現了的方法,可以用介面等其他方法繞過
依賴倒置原則(DIP)
高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。
一句話總結:多用抽象的介面來描述相同的動作,降低實現這個動作的人和物之間的耦合度
介面隔離原則(ISP)
客戶端不應該依賴它不需要的介面;一個類對另一個類的依賴應該建立在最小的介面上。
問題由來:類A透過介面I依賴類B,類C透過介面I依賴類D,如果介面I對於類A和類B來說不是最小介面,則類B和類D必須去實現他們不需要的方法。
一句話總結:就好比魚和人兩個類,魚是游泳和腮呼吸兩個動作,人是走路和吃飯兩個動作,這些動作不能寫在一個介面裡面,把這四個動作都包含了。要拆成專門對魚和人的兩個介面才行。
迪米特法則(LKP)
迪米特法則又叫最少知道原則,最早是在1987年由美國Northeastern University的Ian Holland提出。通俗的來講,就是一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類來說,無論邏輯多麼複雜,都儘量地的將邏輯封裝在類的內部,對外除了提供的public方法,不對外洩漏任何資訊。
一句話總結:father1<-child1,father2<-child2,father1和father2是的手下, father1儘量透過father2去訪問child2, 不要直接在類裡面訪問child2. 下屬怎麼能隨便去領導家的孩子呢,小心別人說你拐賣
開閉原則(OCP)
一句話總結:儘量透過擴充套件軟體實體的行為來實現變化,而不是透過修改已有的程式碼來實現變化。