【23種設計模式】簡單介紹一下設計模式的七大原則

單一職責原則

基本介紹

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

單一職責原則注意事項和細節

  1. 降低類的複雜度,一個類只負責一項職責。
  2. 提高類的可讀性,可維護性
  3. 降低變更引起的風險
  4. 通常情況下,我們應當遵守單一職責原則,只有邏輯足夠簡單,纔可以在代碼級別違反單一職責原則;只有類中方法數量足夠少,可以在方法級別保持單一職責原則

接口隔離原則 Interface Segregation Principle

基本介紹

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

假設一個接口下的幾個實現類都是不需要實現該接口的所有方法的,那麼就應該拆分這個接口

依賴倒轉原則 Dependence Inversion Principle

基本介紹

  1. 高層模塊不應該依賴低層模塊,二者都應該依賴其抽象
  2. 抽象不應該依賴細節,細節應該依賴抽象
  3. 依賴倒轉(倒置)的中心思想是面向接口編程
  4. 依賴倒轉原則是基於這樣的設計理念:相對於細節的多變性,抽象的東西要穩定的多以抽象爲基礎搭建的架構比以細節爲基礎的架構要穩定的多。(在Java中,抽象指的是接口或抽象類,細節就是具體的實現類
  5. 使用接口或抽象類的目的是制定好規範,而不涉及任何具體的操作,把展現細節的任務交給他們的實現類去完成
  6. 實現依賴倒轉的幾種方法:通過參數直接傳入不同的接口實現類;通過構造方法傳遞接口實現類;通過setter方法傳遞(接口中添加set方法)

注意事項和細節

  1. 低層模塊儘量都要有抽象類或接口,或者兩者都有,程序穩定性更好
  2. 變量的聲明類型儘量是抽象類或接口, 這樣我們的變量引用和實際對象間,就存在一個緩衝層,利於程序擴展和優化
  3. 繼承時遵循里氏替換原則

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

開閉原則 Open Closed Principle

基本介紹

  1. 開閉原則(Open Closed Principle)是編程中最基礎、最重要的設計原則
  2. 一個軟件實體如類,模塊和函數應該對擴展開放(對提供方),對修改關閉(對使用方)用抽象構建框架,用實現擴展細節
  3. 當軟件需要變化時,儘量通過擴展軟件實體的行爲來實現變化,而不是通過修改已有的代碼來實現變化。
  4. 編程中遵循其它原則,以及使用設計模式的目的就是遵循開閉原則。

迪米特法則 Demeter Principle

基本介紹

  1. 一個對象應該對其他對象保持最少的瞭解
  2. 類與類關係越密切,耦合度越大
  3. 迪米特法則又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多麼複雜,都儘量將邏輯封裝在類的內部對外除了提供的public 方法,不對外泄露任何信息
  4. 迪米特法則還有個更簡單的定義:只與直接的朋友通信
  5. 直接的朋友:每個對象都會與其他對象有耦合關係,只要兩個對象之間有耦合關係,我們就說這兩個對象之間是朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變量,方法參數,方法返回值中的類爲直接的朋友,而出現在局部變量中的類不是直接的朋友。也就是說,陌生的類最好不要以局部變量的形式出現在類的內部

這個原則的制定,是因爲如果一個類知道或者說是依賴於另外一個類太多細節,這樣會導致耦合度過高,應該將細節全部高內聚於類的內部,其他的類只需要知道這個類主要提供的功能即可

換一句話說,其實就是一個類不能讓外部的類知道自己太多,只要將類封裝好,那麼外部的類就無法依賴類中的細節

迪米特法則注意事項和細節

  1. 迪米特法則的核心是降低類之間的耦合
  2. 但是注意:由於每個類都減少了不必要的依賴,因此迪米特法則只是要求降低類間(對象間)耦合關係, 並不是要求完全沒有依賴關係

合成複用原則 Composite Reuse Principle

基本介紹

  • 原則是儘量使用合成 / 聚合的方式,而不是使用繼承(使用繼承會讓類之間的耦合性增強)

七大原則的核心思想

  1. 找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起。
  2. 針對接口編程,而不是針對實現編程。
  3. 爲了交互對象之間的松耦合設計而努力
  4. 總而言之,就是高內聚,低耦合

送上大話設計模式中的一句話:用抽象構建框架,用細節實現擴展

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章