2023/04/05 更新: 為了避免本文章散落在不同網站,之後統一由部落格更新,再麻煩從部落格查看~
大家好,本系列文章探討經典 Design Patterns 在現代語言 Golang 的演變。雖然小弟是一位還在學習的小小碼農,但希望文章能夠以相對淺顯不高深的角度,讓各位對 Design Patterns 更有感觸,也歡迎交流討論,謝謝~
Design Patterns 是一種「經驗集成」。Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 大師們將過往許多問題解決的實作方案整理,進而出了Design Patterns: Elements of Reusable Object-Oriented Software一書,裡頭統整了 23 種 Patterns。
除了此 23 種經典 Patterns,在 Web 的世界由於對高併發(concurrency)需求相當高,也衍伸出了 Concurrency Patterns ,我選定圖解 Java 多線程設計模式來探討,裡頭有約 10 種 patterns,來確保大量的併發不產生 race condition、deadlock 等問題。
小弟會將這些資料內化了解,統整成 Golang 系列的文章。大家可能會有些好奇,為什麼 Golang 參考了那麼多 Java 的文章,主要是文章開頭說的,Design Patterns 是解決問題的經驗集成,這些經典的問題在 Java 時代即存在,那面對這些問題現代語言 Golang 是怎麼設計的呢?是否使一些問題更易於解決?如良葛格大大 - 設計模式不死?一文中所說「我們真正該做的,是在傳達經典設計模式之後,多探討一些結合現代風格的實作」。
由於 Patterns 的寫法寫起來是都相似的,所以文章中有些 Code 的寫法幾乎與探討資料相同,會在相似的 Code 中標注來源,感謝。
(本系列對良葛格大大的文章有著大量的參考,受益良多,也很推薦大家看看大大的部落格!)
在此列出這次鐵人每天撰寫的目錄,也給自己一個目標讓自己不迷航 XD。由於對於高併發興趣挺大所以會先以 Concurrency Patterns 開始,再介紹經典 Design Patterns。
並且會把相關的 Code 放在此 Github - go-design-patterns。
Concurrency 併發模式: 如何讓程式高併發,並足夠安全,不產生 race condition、dead lock 等問題
Creational 建立模式: 如何有效的生產與管理物件
Structural 結構模式: 如何設計出低耦合的物件關係
Behavioral 行為模式: 如何讓物件互動的更彈性、有效率,職責更清晰