1. 程式人生 > >基本設計模式學習筆記:(一)常見的七種面向物件設計原則

基本設計模式學習筆記:(一)常見的七種面向物件設計原則

0.概述

      面向物件設計原則為支援可維護性複用而誕生,這些原則蘊含在很多設計模式中,他們是從許多設計方案中總結出來的指導性原則

1.單一原則

     一個類只負責一個功能領域中的相應職責,或者說:就一個類而言,應該只有一個引起它變化的原因。

個人總結:將不同職責的方法放在不同的類中。

2.開閉原則

     軟體實體對應擴充套件開放,而對修改關閉,或者說:軟體實體應儘量在不修改原有程式碼的情況下進行擴充套件,抽象化是開閉原則的關鍵。

個人總結:針對相似的功能另外新建一個抽象類,相似功能共同繼承此抽象類,以後再有相似功能加入時可以繼承此抽象類,在呼叫方法時中使用上轉型物件處理即可。

3.里氏代換原則

     所有引用父類物件的地方能夠透明地使用其子類的物件。(注意:使用此方法時子類的所有方法必須在父類中宣告,或子類必須實現父類中宣告的所有方法,因此儘量把父類設計為抽象類或者介面)

個人總結:在程式中儘量使用父類型別定義物件,在執行時再確定子類型別,使用上轉型物件描述。

4.依賴倒轉原則

     抽象不應該依賴於細節,細節應該依賴於抽象,或者說:要針對介面程式設計,而不是針對實現程式設計。

關鍵名詞:依賴注入:當一個物件要與其他物件發生依賴關係時,通過抽象來注入所依賴的物件,常用的注入方式有三種:構造注入,設值注入和介面注入。

個人總結:在具體的實現類和呼叫具體類方法之間引入抽象層。幾乎所有具體的實現類中包含的方法都要在介面或抽象類中定義。

5.介面隔離原則

     使用多個專門的介面,而不是用單一的總介面,或者說,客戶端不應該依賴那些它不需要的介面,每個介面應該承擔一種相對獨立的角色,不幹不該乾的事,該乾的事都要幹。

關鍵名詞:介面:這裡的介面往往有兩種不同的含義:一種是指一個型別所具有的方法特徵的集合,僅僅是一種邏輯上的抽象;另外一種是指某種語言具體的介面定義,有嚴格的定義和結構,比如Java語言中的interface

個人總結:簡而言之就是把功能細化,但在細化過程中又不能太細否則會導致介面過多,如果單憑感覺來分也許分法也不盡相同。

6.合成複用原則

     儘量使用物件組合,而不是繼承來達到複用的目的。

個人總結:實現複用時應該多用關聯(建立新的關係類,將需要連線的類的方法寫入),少用繼承。

7.迪米特法則

     一個軟體實體應當儘可能少的與其他實體發生相互作用,對於一個物件只能直接與朋友發生互動,其朋友包含以下幾類:

         (1)當前物件本身;

         (2)以引數形式傳入到當前物件方法中的物件;

         (3)當前物件的成員物件(如果成員物件使一個集合,那麼集合中的元素也都是朋友);

         (4)當前物件所建立的物件。

個人總結:主要目的是為了降低系統的耦合度,使類與類之間保持鬆散的耦合關係,在類的劃分上,應當儘量建立鬆耦合的類,類之間的耦合度越低,就越有利於複用,一個處在鬆耦合中的類一旦被修改,不會對關聯的類造成太大波及在類的結構設計上,每一個類都應當儘量降低其成員變數和成員函式的訪問許可權在類的設計上,只要有可能,一個型別應當設計成不變類在對其他類的引用上,一個物件對其他物件的引用應當降到最低