設計模式筆記

近期因為服兵役,在裡面太無聊,所以就又重讀了很久之前買的 無暇的程式碼—敏捷完整篇
主要是針對設計模式的部份來看看

大約 3 年前,剛看完書籍就想要現學現賣,結果只寫了 Command Pattern 跟 Active Object Pattern 就沒再更新了
現在回去看,感覺就像是把書籍的內容貼上一樣 XD
當時有位前輩就有回覆過使用模式的原因,現在有比較了結意思了
最初的統整文章:設計模式筆記 (舊)

現在打算依照自己的經驗重新去撰寫這些模式的相關介紹
舊的文章則會保存,把黑歷史留下來 XD

Design Pattern—設計模式

設計模式,一個用物件導向概念寫程式時可能會用到的酷東西
或許曾在課程內聽過,或許在一些講解重構的書籍看過
就我而言,因為學校的正規課程並沒有細談這個東西,所以我實際上對設計模式並不是很了解
大部分的有關設計模式的資訊都來經由 無暇的程式碼—敏捷完整篇 這本書籍取得的

何謂設計模式?

設計模式實際上就是在過去眾多的軟體設計中,經過重重考驗,精粹出來的各種良好的設計架構
也就是說,設計模式並非是一種準則或標準,它只不過是各種良好設計架構的統整而已

讀者可能會誤解,認為只要這著這些「良好的設計架構」就可以產生高品質的程式
然而, 過度的使用設計模式只會讓軟體變得更遭,更亂,更難維護

該不該使用設計模式?

看了前面粗淺的介紹,或許各位會想問,那我到底該不該用設計模式?
答案是:視情況而定

設計模式雖然是好的設計的集合,但是這些設計都有其背景與特定的使用時機,這也是設計模式難學的原因
實際上需要的技能不是學會設計模式,而是知道軟體背後的需求
這樣才能根據所需去評估該如何設計軟體

為何重構會使用到設計模式?

會需要重構就表示工程師意識到這個軟體開始不好維護了
對於可預見的需求無法輕易的擴展,或是發現程式都綁在一起,難以改動
這些會影響開發的設計被稱為「壞味道」

透過重構程式並導入良好的設計模式,可以解決這些問題,並提昇開發效率
但是前面也提過,過度的使用會導致情況變遭
並不是所有的壞味道都需要,且必須要挑一個設計模式來解決

開始之前

在開始學習設計模式之前,要先確保自己對物件導向有一定的程度的理解
必須要知道 interfaceabstract 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 的誤解,寫出錯誤的解釋
    因此將相關的敘述移除,避免誤導