設計模式筆記
近期因為服兵役,在裡面太無聊,所以就又重讀了很久之前買的 無暇的程式碼—敏捷完整篇
主要是針對設計模式的部份來看看
大約 3 年前,剛看完書籍就想要現學現賣,結果只寫了 Command Pattern 跟 Active Object Pattern 就沒再更新了
現在回去看,感覺就像是把書籍的內容貼上一樣 XD
當時有位前輩就有回覆過使用模式的原因,現在有比較了結意思了
最初的統整文章:設計模式筆記 (舊)
現在打算依照自己的經驗重新去撰寫這些模式的相關介紹
舊的文章則會保存,把黑歷史留下來 XD
Design Pattern—設計模式
設計模式,一個用物件導向概念寫程式時可能會用到的酷東西
或許曾在課程內聽過,或許在一些講解重構的書籍看過
就我而言,因為學校的正規課程並沒有細談這個東西,所以我實際上對設計模式並不是很了解
大部分的有關設計模式的資訊都來經由 無暇的程式碼—敏捷完整篇 這本書籍取得的
何謂設計模式?
設計模式實際上就是在過去眾多的軟體設計中,經過重重考驗,精粹出來的各種良好的設計架構
也就是說,設計模式並非是一種準則或標準,它只不過是各種良好設計架構的統整而已
讀者可能會誤解,認為只要這著這些「良好的設計架構」就可以產生高品質的程式
然而, 過度的使用設計模式只會讓軟體變得更遭,更亂,更難維護
該不該使用設計模式?
看了前面粗淺的介紹,或許各位會想問,那我到底該不該用設計模式?
答案是:視情況而定
設計模式雖然是好的設計的集合,但是這些設計都有其背景與特定的使用時機,這也是設計模式難學的原因
實際上需要的技能不是學會設計模式,而是知道軟體背後的需求
這樣才能根據所需去評估該如何設計軟體
為何重構會使用到設計模式?
會需要重構就表示工程師意識到這個軟體開始不好維護了
對於可預見的需求無法輕易的擴展,或是發現程式都綁在一起,難以改動
這些會影響開發的設計被稱為「壞味道」
透過重構程式並導入良好的設計模式,可以解決這些問題,並提昇開發效率
但是前面也提過,過度的使用會導致情況變遭
並不是所有的壞味道都需要,且必須要挑一個設計模式來解決
開始之前
在開始學習設計模式之前,要先確保自己對物件導向有一定的程度的理解
必須要知道 interface、abstract class 、繼承等相關概念
如果能了解像是委派、耦合等相關概念會更好
目錄
在 無暇的程式碼—敏捷完整篇 書中共介紹了這些模式:
- Command Pattern (2023-01-20)
- Active Object Pattern
- Template Pattern (2023-02-26)
- Strategy Pattern
- Facade Pattern
- Mediator Pattern
- Singleton Pattern
- Monostate Pattern
- Null Object Pattern
- Factory Pattern
- Composite Pattern
- Observer Pattern
- Abstract Server Pattern
- Adapter Pattern
- Bridge Pattern
- Proxy Pattern
- Gateway Pattern
- Visitor Pattern
- State Pattern
設計模式並不是只有這些,但再列下去除了有生之年沒辦法寫完之外,對設計能力也不會有太大的幫助
了解並內化模式原理和思維遠比知道和使用模式來得有效
參考
- 無暇的程式碼—敏捷完整篇,物件導向原則、設計模式與 C# 實踐
- 自身經驗
更新
2023/02/19
移除反模式的相關敘述最初在寫文章的時候因為對 Anti Pattern 的誤解,寫出錯誤的解釋
因此將相關的敘述移除,避免誤導