大話設計模式 六大原則

2022-09-23 14:03:07 字數 2528 閱讀 1704

**:

設計模式六大原則分別是單一職責原則(spr)、開放-封閉原則、黎克特制代換原則(lsp)、依賴倒轉原則、迪公尺特原則(lod)和合成/聚合復用原則(carp)。

1.單一職責原則,就乙個類而言,應該僅有乙個引起它變化的原因。

如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合導致的設計,當變化發生時,設計會遭受到意想不到的破壞。

軟體設計真正要做的許多內容,就是如果發現職責並把那些職責相互分離。其實這個要去判斷是否應該分離出類來,也不難,那就是如果能夠想到多於乙個的動機去改變乙個類,那麼這個類就具有多於乙個的職責,就應該考慮類的職責分離。

整合當然是一種好的思想,但是當我們程式設計時,我們卻是在類的職責分離上多思考,做到單一職責,這樣我們的**才是真正的易維護、易擴充套件、易復用、靈活多樣。

2.開放-封閉原則,是說軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可修改。

這個原則其實有兩個特點:乙個是「對於擴充套件是開放的」;「對於更改是封閉的」。

在軟體設計階段,怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第乙個版本以後不斷推出新的版本呢?開放-封閉原則給了我們答案。

無論模組是多麼的「封閉」,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對於他設計的模組應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生改變的種類,然後構造抽象來隔離那些變化,等到變化時立即採取行動。

在我們最初程式設計寫**時,假設變化不會發生。當變化發生時,我們就建立抽象來隔離以後發生的同類變化。

面對需求,對程式的改動是通過增加新**來進行的,而不是更改現有的**。

下面來舉乙個課本上的例子:編寫乙個運算方法程式,滿足基本的運算。

若有新的功能需要加入,在**中加入相應的類就可以了。

3.黎克特制代換原則,子型別必須能夠替換掉它們的父型別。

乙個軟體實體如果使用的是乙個父類的話,那麼一定使用於其子類,而且它察覺不出父類物件和子類物件的區別。也就是說,在軟體裡,把父類都替換成它的子類,程式的行為沒有變化。

也正是因為有了這個原則,使得繼承復用成為了可能,只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被復用,而對子類也能夠在父類的基礎上增加新的行為。比如說,貓是繼承動物類的,以動物的身份擁有吃、喝、跑、叫等行為,可當某一天,我們需要狗、牛、羊也擁有類似的行為,由於它們都是繼承於動物,所以除了更改例項化的地方,其它地方則不需要。

4.依賴倒轉原則,a:高層模組不應該依賴底層模組。兩個模組都應該依賴抽象。

b:抽象不應該依賴細節,細節應該依賴抽象。

原話解釋是抽象不應該依賴細節,細節應該依賴抽象。說白了,就是針對介面程式設計,不要對實現程式設計。

依賴倒轉原則其實可以說是物件導向設計的標誌,用哪種語言編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有的依賴關係都是終止與抽象類或者介面,那就是面相物件的設計,反之就是面向過程化的設計了。

5.迪公尺特法則,也叫最少知識原則,如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。

前提是在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權。

其根本思想是強調了類之間的松耦合,解耦---才是它們最為重要的應用,這也是所有原則的根本。類之間的耦合越低,越有利於復用,乙個處在弱耦合的類被修改,不會對有關係的類造成波及。

6.合成/聚合復用原則,盡量使用合成/聚合,盡量不要使用類的繼承。

合成(也翻譯成組合)和聚合都是關聯的特殊種類。聚合表示一種弱的「擁有」關係,體現的是a物件可以包含b物件,但b物件不是a物件的一部分;合成則是一種強的「擁有」關係,體現了嚴格的部分和整體 的關係,部分和整體的生命週期一樣。比如說,大雁有兩個翅膀,翅膀與大雁是部分和整體的關係,並且他們的生命週期是相同的,於是大雁和翅膀就是合成關係。而大雁是群居動物,所以每只大雁都是屬於乙個雁群,乙個雁群可以有多隻大雁,所以大雁和雁群是聚合關係。

合成/聚合原則的好處就是,優先使用物件的合成/聚合將有助於你保持每個類被封裝,並被集中在單個任務上,這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。

ps: 學習小結:

在進行設計模式的學習的時候,總是感覺這是一種讓我們更好的進行軟體設計的模式,而正是這些模式的存在才使得我們的軟體結構以更好的形式存在,而且可復用性和靈活性都很強。

這部分的知識,但從課本上來學習,效果不是很大,還是要不斷地在實踐中不斷地去練習使用,才能更加靈活的使用這些模式,以編出更好的軟體。

大話設計模式 (六大原則)

設計模式六大原則分別是單一職責原則 spr 開放 封閉原則 黎克特制代換原則 lsp 依賴倒轉原則 迪公尺特原則 lod 和合成 聚合復用原則 carp 1.單一職責原則,就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑...

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...