設計模式筆記

2022-10-04 03:54:03 字數 2474 閱讀 5033

1. 業務封裝:業務邏輯和介面邏輯分開,讓他們之間的耦合度降低,只有分離開,才能達到容易維護或擴充套件。

2. 程式設計規則:應盡可能的避免**的重複,當**重複過多時,將為維護帶來很大的麻煩。

物件導向程式設計封裝繼承多型缺一都不是物件導向的。

3. 類與類之間的各種關係:

氧氣 <–––– 動物依賴關係雁群 ◇—> 大雁聚合關係

鳥 ◆—> 翅膀組合關係企鵝 —> 氣候關聯關係

uml圖

(1)繼承關係用空心三角 + 實線表示

(2)實現介面用空心三角形 + 虛線表示

(3)當乙個類「知道」另乙個類時,可以用關聯關係,關聯關係用實線 + 箭頭表示,在乙個類中會引用另乙個類的物件。

(4)每只大雁都屬於乙個雁群,乙個雁群可以有多隻大雁,滿足聚合關係。聚合表示一種弱的『擁有』關係,體現的是a物件可以包含b物件,但b物件不是a物件的一部分。在雁群中可以包含乙個大雁的陣列物件。

(5)聚合關係用空心菱形 + 實現箭頭表示

(6)組合(合成)是一種強的擁有關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣。 組合關係用實心的菱形 + 實線箭頭表示。在乙個鳥物件生成時,例項化兩個翅膀物件。

則鳥和翅膀有相同的生命週期。

(7)動物依賴於氧氣和水,這就是依賴關係。用虛線箭頭來表示。所依賴的物件作為函式的形參。例如動物類的函式成員可以用水喝氧氣作為它的形參。

簡單工廠模式

1. 到底要例項化誰,將來會不會增加例項化的物件,這是很容易變化的地方,應該考慮用乙個單獨的類來做這個創造例項的過程。(即寫乙個當執行某個操作時能產生相應的物件的類。

例如執行加法時,則在創造例項的類中產生乙個加法類的物件)

策略模式

1. 物件導向程式設計並不是類越多越好,類的劃分是為了封裝,但分類的基礎是抽象,具有相同屬性和功能的物件的抽象集合才是類。

2. 策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換。此模式讓演算法的變化不會影響到使用演算法的客戶。

3. 演算法本身只是一種策略,最重要的是這些演算法是隨時間都可能互相替換的。這就是變化點,而封裝變化點是我們物件導向的一種很重要的思維方式。

4. 策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,他可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。(具體的演算法本就是乙個策略)

5. 策論模式的優點:策略模式的strategy類層次為context定義了一系列的可供重用的演算法或行為。

繼承有助於析取出這些演算法中的公共功能。同時也簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。

6. 當不同的行為堆砌在乙個類中時,就很難避免使用條件判斷語句來選擇合適的行為。將這些行為封裝在乙個個獨立的類中,可以在使用這些行為的類中消除條件語句。

7. 策略模式封裝了變化,其就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性。

8. 策略模式和簡單工廠模式結合,可以使選擇具體實現的職責由客戶端轉移到伺服器端。

單一職責原則

1. 在策略模式的實現中,有switch存在,當要增加新的需求時,就要去改動switch**。而任何需求的變更都需要成本。所以改動的越小越好。這時需要用到反射技術。

2. 就乙個類而言,應該僅有乙個引起它變化的原因。

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

4. 軟體設計真正要做的許多內容就是發現職責並把那些職責相互分離開。

判斷是否應分離出類:如果你能夠想到多於乙個的動機去改變乙個類,那麼這個類就具有多於乙個的職責。

5.在類的職責分離上多做思考,做到單一職責,這樣的**才能是真正的易維護,易擴充套件,易復用,靈活多樣。

開放 - 封閉原則

1. 開放封閉原則:是說軟體實體(類,模組,函式等等)應該可擴充套件,但不可修改。即對於擴充套件是開放的,對於更改是封閉的。

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

3. 等到變化時立即採取行動。在我們最初編寫**時,假設變化不會發生。當變化發生時,我們就建立抽象來隔離以後發生的同類變化。

4. 面對需求,對程式的改動是通過增加新**進行的,而不是更改現有的**。這就是『開放封閉原則』的精神所在。

5. 我們希望的是在開發工作展開不久就知道可能發生的變化。查明可能發生的變化所等待的時間越長,要建立正確的抽象就越困難。

6. 『開放封閉原則』是物件導向設計的核心所在。遵循這個原則可以帶來物件導向技術所聲稱的巨大好處,也就是可維護,可擴充套件,可復用,靈活性好。

開發人員應該僅對程式中呈現出頻繁變化的那些部分做出抽象,然而,對於應用程式中的每個部分都刻意的進行抽象同樣不是乙個好主意。拒絕不成熟的抽象和抽象本身一樣重要。

設計模式總結State模式

設計模式學習筆記 狀態模式 1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境...

設計模式總結

軟體設計中散發的臭氣 1 僵化性 rigidity 很難對軟體進行改動,因為每個改動都會迫使許多對系統其他部分的改動。2 脆弱性 fragility 對系統的改動會導致系統中和改動的地方在概念上無關的許多地方出現問題。3 牢固性 immobility 很難解開系統中某部分與其他部分的糾結,從而難以使...

加盟模式設計

福成肥牛餐飲企業加盟模式設計 公司性質 餐飲火鍋全國連鎖店 調研單店位址 內蒙古呼和浩特市玉泉區大召街88號 郵編 014400 0471 3969888 e mail 公司主頁 http 目錄餐飲企業特許加盟背景介紹3 餐飲企業經營分析4 特許加盟模式設計原則4 特許經營權的組合設計方案5 分析確...