學習完大話設計模式
,其中的六種原則是很重要的,我們知道設計模式是軟體設計的思想,而不是軟體技術。它重在使用介面與抽象類來解決各種問題,在使用這些設計模式時,我們應該遵守這六大原則。
單一職責原則:就乙個類而言
,應該僅有乙個引起它變化的原因
.即乙個類只負責一項職責.問題
類class
負責r1和r2
兩個不同的職責,當由於職責
r1需求發生改變而需要修改
class
時,有可能會導致原本執行正常的職責
r2功能發生故障。
解決辦法
遵循單一職責原則,分別建立兩個類,
class1
和class2.
class1
完成r1
的功能,
class2
完成r2
的功能。這樣不管修改哪乙個類,都不會影響另乙個類的職責發生故障。
不用單一職責原則時
由於職責擴散(因為某種原因,職責
r1被分化為粒度更細的職責r1和
r2)。遵循單一職責,需要將類
class
分解為兩個類
class1
和class2
,原本的程式已經寫好了,這樣做太浪費時間,所以簡單的修改類
class
,用它負責兩個職責更加好。
遵循單一職責的優點:1
、可以降低類的複雜度,乙個類只負責一項職責,其邏輯肯定比負責多項職責簡單的多。
2、提高類的可讀性,提高系統的可維護性。
3、變更引起的風險降低,變更是必然的,如果單一職責原則遵守的好,當修改乙個功能時,可以顯著降低對其他功能的影響。
開放封閉原則:是說軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可以修改。
特徵: 1
、對於擴充套件是開放的。
2、對於更改是封閉的。問題
在軟體的生命週期內,因為某些原因,需要對原有**進行修改,這過程中可能會給舊**中引入錯誤,也可能會使我們不得對整個功能進行重構,並且需要原有**經過重新測試。
解決辦法
利用開閉原則,盡量通過軟體實體的行為來實現變化,而不是通過修改**來實現變化。
依賴倒轉原則:1
、高層模組不應依賴低層模組,兩個都應該依賴抽象。2、
抽象不應依賴細節,細節應該依賴抽象。問題
類classa
直接依賴
classb
,假如將
classa
改為依賴
classc
,則必須通過修改
classa
**來實現。解決
將classa
修改為依賴介面i,
classb
、classc
各自實現介面i,
classa
通過介面
i間接與
classb
、classc
發生聯絡,降低了修改
classa
的機率。
黎克特制代換原則:子類必須能夠替換掉他們的父型別。解釋
乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,而且它察覺不出父類物件和子類物件的區別。
迪公尺特法則:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。
根本思想
強調了類之間的松耦合 優點
類之間的耦合越弱,越有利於復用,乙個處在弱耦合的類被修改,不會對有關係的類造成波及
合成聚合復用原則:盡量使用合成
/聚合,盡量不要使用類繼承。
聚合表示一種弱的擁有關係,合成是一種強的擁有關係。合成的部分和整體的生命週期一樣。
優點:有限使用物件的合成
/聚合將有助於保持每個類唄封裝,並集中在單個任務上。
總結:
設計模式原則再加上oop三大屬性,封裝、繼承、多型,我們就可以清楚的理解設計模式了。設計模式的核心原則是開閉原則,所有的原則都圍繞著它進行展開。
設計模式 設計模式原則
1 單一職責原則 srp 乙個類應當只有乙個引起其變化的原因。使用單一職責原則的好處有 1 類的複雜性降低 2 可讀性提高 3 可維護性提高 4 變更引起的風險降低 2 黎克特制替換原則 lsp 在使用父類的地方,可以使用其子類替換。黎克特制替換原則的含義 1 子類必須完全實現父類的方法 2 子類可...
設計模式 設計原則
1.單一職責原則 single responsibility principle,簡稱srp 就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到...
設計模式 設計原則
description 這是本人學習 設計模式之禪 的筆記 設計原則 一 單一職責 應該有且僅有乙個原因讓乙個類發生變更。這個原則目的是要讓介面的職責分明,結構清晰。優點 類的複雜度降低,可讀性提高,變更風險低,可維護性提高。二 黎克特制替換 通俗一點就是父類存在的地方,可以替換為子類,而程式的行為...