1. 程式人生 > >設計模式七大原則

設計模式七大原則

1、單一職責原則

定義:不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責
問題由來:類T負責兩個不同的職責:職責P1,職責P2。當由於職責P1需求發生改變而需要修改類T時,有可能會導致原本執行正常的職責P2功能發生故障。
解決方案:遵循單一職責原則。分別建立兩個類T1、T2,使T1完成職責P1功能,T2完成職責P2功能。這樣,當修改類T1時,不會使職責P2發生故障風險;同理,當修改T2時,也不會使職責P1發生故障風險。
違背原則:但是即便是經驗豐富的程式設計師寫出的程式,也會有違背這一原則的程式碼存在。為什麼會出現這種現象呢?因為有職責擴散。所謂職責擴散,就是因為某種原因,職責P被分化為粒度更細的職責P1和P2


遵循單一職責原的優點有:
  1、可以降低類的複雜度,一個類只負責一項職責,其邏輯肯定要比負責多項職責簡單的多;
  2、提高類的可讀性,提高系統的可維護性;
  3、變更引起的風險降低,變更是必然的,如果單一職責原則遵守的好,當修改一個功能時,可以顯著降低對其他功能的影響。

2、里氏替換原則

定義1:如果對每一個型別為 T1的物件 o1,都有型別為 T2 的物件o2,使得以 T1定義的所有程式 P 在所有的物件 o1 都代換成 o2 時,程式 P 的行為沒有發生變化,那麼型別 T2 是型別 T1 的子型別。
定義2:所有引用基類的地方必須能透明地使用其子類的物件。
問題由來:有一功能P1,由類A完成。現需要將功能P1進行擴充套件,擴充套件後的功能為P,其中P由原有功能P1與新功能P2組成。新功能P由類A的子類B來完成,則子類B在完成新功能P2的同時,有可能會導致原有功能P1發生故障。


解決方案:當使用繼承時,遵循里氏替換原則。類B繼承類A時,除新增新的方法完成新增功能P2外,儘量不要重寫父類A的方法,也儘量不要過載父類A的方法。

說明:繼承包含這樣一層含義:父類中凡是已經實現好的方法(相對於抽象方法而言),實際上是在設定一系列的規範和契約,雖然它不強制要求所有的子類必須遵從這些契約,但是如果子類對這些非抽象方法任意修改,就會對整個繼承體系造成破壞。而里氏替換原則就是表達了這一層含義。

里氏替換原則通俗的來講就是:
    子類可以擴充套件父類的功能,但不能改變父類原有的功能。
它包含以下4層含義:
    1、子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法
    2、子類中可以增加自己特有的方法。


    3、當子類的方法過載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入引數更寬鬆。
    4、當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。

3、依賴倒置原則

定義:高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。
問題由來:類A直接依賴類B,假如要將類A改為依賴類C,則必須通過修改類A的程式碼來達成。這種場景下,類A一般是高層模組,負責複雜的業務邏輯;類B和類C是低層模組,負責基本的原子操作;假如修改類A,會給程式帶來不必要的風險。
解決方案:將類A修改為依賴介面I,類B和類C各自實現介面I,類A通過介面I間接與類B或者類C發生聯絡,則會大大降低修改類A的機率。
實質:面向介面程式設計(介面注入、setter注入、構造方法注入)

4、介面隔離原則

定義:客戶端不應該依賴它不需要的介面;一個類對另一個類的依賴應該建立在最小的介面上。
問題由來:類A通過介面I依賴類B,類C通過介面I依賴類D,如果介面I對於類A和類B來說不是最小介面,則類B和類D必須去實現他們不需要的方法。
解決方案:將臃腫的介面I拆分為獨立的幾個介面,類A和類C分別與他們需要的介面建立依賴關係。也就是採用介面隔離原則。採用介面隔離原則對介面進行約束時,要注意以下幾點:
    1、介面儘量小,但是要有限度。對介面進行細化可以提高程式設計靈活性是不掙的事實,但是如果過小,則會造成介面數量過多,使設計複雜化。所以一定要適度。
    2、為依賴介面的類定製服務,只暴露給呼叫的類它需要的方法,它不需要的方法則隱藏起來。只有專注地為一個模組提供定製服務,才能建立最小的依賴關係。
    3、提高內聚,減少對外互動。使介面用最少的方法去完成最多的事情。
    4、運用介面隔離原則,一定要適度,介面設計的過大或過小都不好。設計介面的時候,只有多花些時間去思考和籌劃,才能準確地實踐這一原則。

5、迪米特法則

定義:一個物件應該對其他物件保持最少的瞭解。
問題由來:類與類之間的關係越密切,耦合度越大,當一個類發生改變時,對另一個類的影響也越大。
解決方案:儘量降低類與類之間的耦合。
簡單理解:通俗的來講,就是一個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類來說,無論邏輯多麼複雜,都儘量地的將邏輯封裝在類的內部,對外除了提供的public方法,不對外洩漏任何資訊。

6、開閉原則

定義:一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。
問題由來:在軟體的生命週期內,因為變化、升級和維護等原因需要對軟體原有程式碼進行修改時,可能會給舊程式碼中引入錯誤,也可能會使我們不得不對整個功能進行重構,並且需要原有程式碼經過重新測試。
解決方案:當軟體需要變化時,儘量通過擴充套件軟體實體的行為來實現變化,而不是通過修改已有的程式碼來實現變化。

7、合成/聚合複用原則:

相關推薦

軟件設計模式七大原則的含義附舉例說明

其他 要求 public 開發 地方 但是 步驟 參數 很多 設計模式(面向對象)有七大原則,分別是:   1.開放-封閉原則   2.單一職責原則   3.依賴倒轉原則   4.迪米特法則(也稱為最小知識原則)   5.接口隔離原則   6.合成/聚合復用原則   7.裏

軟體設計模式七大原則

設計模式七大原則: 1.開放-封閉原則 2.單一職責原則 3.依賴倒轉原則 4.迪米特法則(也稱為最小知識原則) 5.介面隔離原則 6.合成/聚合複用原則 7.里氏代換原則 一.開放-封閉原則 概念:一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。模組應該儘量在不修改

設計模式七大原則總結

1.單一職責原則(Single Responsibility Principle) 目的:降低程式碼複雜度、系統解耦合、提高可讀性 含義:對於一個類,只有一個引起該類變化的原因;該類的職責是唯一的,且這個職責是唯一引起其他類變化的原因。 解決:將不同的職責封裝到不同的類

設計模式七大原則

1、單一職責原則:定義:不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。問題由來:類T負責兩個不同的職責:職責P1,職責P2。當由於職責P1需求發生改變而需要修改類T時,有可能會導致原本執行正常的職責P2功能發生故障。解決方案:遵循單一職責原則。分別建立兩

Java設計模式七大原則

原文地址:http://blog.csdn.net/u011288271/article/details/52497602 對於Java看到過一個很有意思的說法:Java有六大心法,23種武功招式。 分別就是Java設計模式六大原則和常用的23種設計模式了。 本篇是對六

萬字總結之設計模式七大原則

前言 上篇說了反射,將其作為框架的基礎知識。還沒看過的移至傳送門,萬字總結之反射(框架之魂)。今天我們來看設計模式。話不多說,let's go。 什麼是設計模式? 設計模式是對軟體設計普遍存在的問題,所提出的解決方案。 與專案本身沒有關係,不管是電商,ERP,OA 等,都可以利用設計模式來解決相關問題。 當

Java設計模式六大原則或者說七大原則

設計 sub 隔離 single lose 開閉原則 bili div 依賴倒轉原則 1.開閉原則(Open Close Principle) 2.裏氏代換原則(Liskov Substitution Principle) 3.依賴倒轉原則(Dependence Inver

Java設計模式六大原則或者說七大原則 整理 (其實文章裡有七個。。。。)

1.開閉原則(Open Close Principle)定義:一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。    開放-封閉原則的意思就是說,你設計的時候,時刻要考慮,儘量讓這個類是足夠好,寫好了就不要去修改了,如果新需求來,我們增加一些類就完事了,原來的程式碼能不動則不動。這個原則有兩個特性

Java設計模式六大原則或者說七大原則 整理 (其實文章裡有七個。。。。)

1.開閉原則(Open Close Principle) 定義:一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉。     開放-封閉原則的意思就是說,你設計的時候,時刻要考慮,儘量讓這個類是足夠好,寫好了就不要去修改了,如果新需求來,我們增加一些類就完事了,原來的程式碼能不動則不動。這個原則有兩個

設計模式 - 七大設計原則(三)- 迪米特法則與里氏替換原則

概述 簡單介紹一下七大設計原則: 開閉原則:是所有面向物件設計的核心,對擴充套件開放,對修改關閉 依賴倒置原則:針對介面程式設計,依賴於抽象而不依賴於具體 單一職責原則:一個介面只負責一件事情,只能有一個原因導致類變化 介面隔離原則:使用多個專門的介面,而不是使用一個總介面 迪米特法則(最少知道原則):

設計模式六大原則之裏氏替換原則

number -h ole 擁有 method about rect sse 程序 1 裏氏替換原則定義 Liskov於1987年提出了一個關於繼承的原則“Inheritance should ensure that any property proved about su

設計模式--六大原則

活性 tro 開閉 拆分 其中 com att 隔離 裏氏替換原則 設計模式六大原則 單一職責原則: 不要存在多於一個導致類變更的原因。**通俗的說,即一個類只負責一項職責 裏氏替換原則: 裏氏替換原則通俗的來講就是:子類可以擴展父類的功能,但不能改變父

設計模式六大原則(6):開閉原則

思考 外部 編程人員 恰恰 單一職責 何事 適應 擴展 分享 開閉原則 定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。 問題由來:在軟件的生命周期內,因為變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使我們不得不對

設計模式六大原則

編程 color 什麽 例子 進行 函數 細節 增加 客戶 1、開閉原則:Open Close Principle 是軟件實體(類,模塊,函數等)應該可以擴展,但是不可修改。 理解:只以基於原本的來擴展功能,但不能修改原本的代碼。已經面對需求時,對程序的改動是通過增加新

11設計模式六大原則——開閉原則

職責 art 並不是 錯誤 接口 屬於 倒置 編程 探討 定義:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。 問題由來:在軟件的生命周期內,因為變化、升級和維護等原因需要對軟件原有代碼進行修改時,可能會給舊代碼中引入錯誤,也可能會使我們不得不對整個功能進行重構,

【0002】設計模式原則

範圍 class 變化 chan reason 一件事 ever 模式 單一職責原則 【1】單一職責原則:   要求一個接口或者類只有一個原因引起變化;    也就是一個接口或者類只有一個職責,它負責一件事情;  There should never be more

java設計模式六大原則

設計者 做的 設計模式 員工 打印 temp 有一種 基於 imp 目錄: 設計模式六大原則(1):單一職責原則 設計模式六大原則(2):裏氏替換原則 設計模式六大原則(3):依賴倒置原則 設計模式六大原則(4):接口隔離原則 設計模式六大原則(5):迪米特法則 設計模式六

設計模式六大原則(2):裏氏替換原則

tr1 裏氏替換原則 style tar 裏氏替換 href target 替換 設計模式 XN潮寺贛3PF鋁73瓷Hhttp://weibo.com/p/1005056364252732 壇2偈6v實8uka誆敲wmhttp://weibo.com/p/10050563

設計模式六大原則(轉)

method 過多 這樣的 不同 提高 依賴倒置 同心圓 23種設計模式 變化 設計模式六大原則(1):單一職責原則 定義:不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。 問題由來:類T負責兩個不同的職責:職責P1,職責P2。當由於職責P1需求發

設計模式六大原則(一):單一職責原則

控制 line 避免 多人 由來 pan 兩個類 思想 功能 單一職責定義: 不要存在多於一個導致類變更的原因,通俗的說,即一個類只負責一項職責。 問題由來: 類T負責兩個不同的職責:職責P1,職責P2。當由於職責P1需求發生改變而需要修改類T時,有可能會導致原