1. 程式人生 > 實用技巧 >stm32與紅外遙控器(NEC協議)

stm32與紅外遙控器(NEC協議)

設計模式七大原則

1.設計模式的目的

編寫軟體過程中,程式設計師面臨著來自 耦合性,內聚性以及可維護性,可擴充套件性,重用性,靈活性 等多方面的挑戰,設計模式是為了讓程式(軟體),具有更好的

  1) 程式碼重用性 (即:相同功能的程式碼,不用多次編寫)

  2) 可讀性 (即:程式設計規範性, 便於其他程式設計師的閱讀和理解)

  3) 可擴充套件性 (即:當需要增加新的功能時,非常的方便,稱為可維護)

  4) 可靠性 (即:當我們增加新的功能後,對原來的功能沒有影響)

  5) 使程式呈現高內聚,低耦合的特性

2.設計模式七大原則

設計模式原則,其實就是程式設計師在程式設計時,應當遵守的原則

,也是各種設計模式的基礎(即:設計模式為什麼這樣設計的依據)

設計模式常用的七大原則有:

  1. 單一職責原則
  2. 介面隔離原則
  3. 依賴倒轉(倒置)原則
  4. 里氏替換原則
  5. 開閉原則
  6. 迪米特法則
  7. 合成複用原則
1.單一職責原則(Single Responsibility)
基本介紹

  對類來說的,即一個類應該只負責一項職責。如類 A 負責兩個不同職責:職責 1,職責 2。當職責 1 需求變更而改變 A 時,可能造成職責 2 執行錯誤,所以需要將類 A 的粒度分解為 A1,A2

單一職責原則注意事項和細節
  1. 降低類的複雜度,一個類只負責一項職責
  2. 提高類的可讀性,可維護性
  3. 降低變更引起的風險
  4. 通常情況下,我們應當遵守單一職責原則
    ,只有邏輯足夠簡單,才可以在程式碼級違反單一職責原則; 只有類中方法數量足夠少,可以在方法級別保持單一職責原則
2.介面隔離原則 (Interface Segregation Principle)
基本介紹

  1. 客戶端不應該依賴它不需要的介面,即 一個類對另一個類的依賴應該建立在最小的介面

  2. 看圖:

   3. 類A通過介面 Interface1 依賴類B,類C通過介面 Interface1 依賴類D,如果介面 Interface1 對於類A和類C來說不是最小介面,那麼類 B 和類 D 必須去實現他們不需要的方法。

  4. 按隔離原則應當這樣處理:

  將介面 Interface1 拆分為獨立的幾個介面(這裡我們拆分成 3 個介面),類 A 和類 C 分別與他們需要的介面建立依賴關係。也就是採用介面隔離原則

3.依賴倒轉原則(Dependence Inversion Principle)
基本介紹

   依賴倒轉原則(Dependence Inversion Principle)是指:

  1)高層模組不應該依賴低層模組,二者都應該依賴其抽象

  2)抽象不應該依賴細節,細節應該依賴抽象

  3)依賴倒轉(倒置)的中心思想是面向介面程式設計

  4)依賴倒轉原則是基於這樣的設計理念:相對於細節的多變性,抽象的東西要穩定的多。以抽象為基礎搭建的架構比以細節為基礎的架構要穩定的多。在Java中,抽象指的是介面或抽象類,細節就是具體的實現類。

  5)使用介面或抽象類的目的是制定好規範,而不涉及任何具體的操作,把展現細節的任務交給他們的實現類去完成。

依賴關係傳遞的三種方式:

  1)介面傳遞

  2)構造方法傳遞

  3)setter 方法傳遞

依賴倒轉原則的注意事項和細節

  1)低層模組儘量都要有抽象類或介面,或者兩者都有,程式穩定性更好

  2)變數的宣告型別儘量是抽象類或介面,這樣我們的變數引用和實際物件間,就存在一個緩衝層,利於程式擴充套件和優化。

  3)繼承時遵循里氏替換原則

4.里氏替換原則(Liskov Substitution Principle)
OO中的繼承性的思考和說明

  1)繼承包含這樣一層含義:父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。

  2)繼承在給程式設計帶來便利的同時,也帶來了弊端。比如使用繼承會給程式帶來侵入性,程式的可移植性降低,增加物件間的耦合性,如果一個類被其他的類所繼承,則當這個類需要修改時,必須考慮到所有的子類,並且父類修改後,所有涉及到子類的功能都有可能產生故障。

  3)問題提出:在程式設計中,如何正確的使用繼承? =>里氏替換原則

基本介紹

  1)里氏替換原則(Liskov Substitution Principle)在1988年,由麻省理工學院的一位姓裡的女士提出的。

  2)如果對每個型別為 T1 的物件 o1,都有型別為 T2 的物件 o2,使得以 T1 定義的所有程式 P 在所有的物件 o1 都代換成 o2 時,程式 P 的行為沒有發生變化,那麼型別 T2 是型別 T1 的子型別。換句話說,所有引用基類的地方必須能透明地使用其子類的物件。

  3)在使用繼承時,遵循里氏替換原則,在子類中儘量不要重寫父類的方法

  4)里氏替換原則告訴我們,繼承實際上讓兩個類耦合性增強了,在適當的情況下,可以通過聚合,組合,依賴來解決問題。

5.開閉原則(Open Closed Principle)

基本介紹

  1)開閉原則(Open Closed Principle)是程式設計中最基礎、最重要的設計原則

  2)一個軟體實體如類,模組和函式應該對擴充套件開放(對提供方),對修改關閉(對使用方)。用抽象構建框架,用實現擴充套件細節。

  3)當軟體需要變化時,儘量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的程式碼來實現變化。

  4)程式設計中遵循其它原則,以及使用設計模式的目的就是遵循開閉原則。

6. 迪米特法則(Demeter Principle)
基本介紹

  1)一個物件應該對其他物件保持最少的瞭解

  2)類與類關係越密切,耦合度越大

  3)迪米特法則(Demeter Principle)又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多少複雜,都儘量將邏輯封裝在類的內部。對外除了提供的public 方法,不對外洩露任何資訊

  4)迪米特法則還有個更簡單的定義:只與直接的朋友通訊

  5)直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係,我們就說這兩個物件之間是朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變數,方法引數,方法返回值中的類為直接的朋友,而出現在區域性變數中的類不是直接的朋友。也就是說,陌生的類不要以區域性變數的形式出現在類的內部。

7.合成複用原則
基本介紹

  原則是儘量使用合成/聚合的方式,而不是使用繼承

設計原則核心思想

  1)找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的程式碼混在一起。

  2)針對介面程式設計,而不是針對實現程式設計。

  3)為了互動物件之間鬆耦合設計而努力