From Gossip@caterpillar非關語言: 設計模式http://www.riabook.cn/doc/designpattern/
程式設計是思維具體化的一種方式,是思考如何解決問題的過程,設計模式是在解 決問題的過程中,一些良好思路的經驗內建,最早講設計模式,人們總會提到 Gof 的著作,它最早将經典的 23 種模式集合在一起說明,對後期學習程式設計,尤其是對從事物件導向程式設計的人們起了莫大的影響。
後來設計模式一詞被廣泛的應用到各種經驗內建,甚至還有反模式(AntiPattern),反模式教導您如何避開一些常犯且似是而非的程式設計思維。
這邊的話将整理一些設計模式學習心得,實作的部份是使用Java,因而您會看到一些與 Gof 模式不同的圖及實作方式,這是為了善用一些Java本身的特性,至于C++的實作方面,Gof 的書已經給了不少的例子。
在一些模式的實作上,您會發現我用了介面(interface)來取代抽象類别(Abstract class),這與原先的Gof書中的範例會不盡相同,這是因為在C++中沒有介面,一個完全沒有實作任何方法的抽象類别,根據當時描述的主題特性,可以 的話會将之換為介面,在語義上會較符合Java語言的特性,但是您要知道的是,介面與完全沒有實作任何方法的抽象類别在某些時候是可以互換的。
在這邊所看到的 UML 圖都是使用 Jude 繪制的,Jude 是一個純 Java 撰寫的 UML 工具程式,可運作與 Windows、Linux 等多個平台,體積小,使用簡易。
<dl><dt>Gof 模式</dt></dl> 以下的設計模式則是我個人從 Gof 學習中的個人體會與實作,并增加幾個導入或衍生的簡單模式。
Creational 模式
物件的産生需要消耗系統資源,是以如何有效率的産生、管理 與操作物件,一直都是值得讨論的課題, Creational 模式即與物件的建立相關,在這個分類下的模式給出了一些指導原則及設計的方向。 Simple Factory 模式 Abstract Factory 模式 Builder 模式 Factory Method 模式 Prototype 模式 Singleton 模式 Registry of Singleton 模式
Structural 模式
如何設計物件之間的靜态結構,如何完成物件之間的繼承、實 現與依賴關系,這關乎着系統設計出來是否健壯(robust):像是易懂、易維護、易修改、耦合度低等等議題。Structural 模式正如其名,其分類下的模式給出了在不同場合下所适用的各種物件關系結構。 Default Adapter 模式 Adapter 模式 - Object Adapter Adapter 模式 - Class Adapter Bridge 模式 Composite 模式 Decorator 模式 Facade 模式 Flyweight 模式 Proxy 模式(一) Proxy 模式(二)
Behavioral 模式
物件之間的合作行為構成了程式最終的行為,物件之間若有設 計良好的行為互動,不僅使得程式執行時更有效率,更可以讓物件的職責更為清晰、整個程式的動态結構(像是物件排程)更有彈性。 Chain of Responsibility 模式 Command 模式 Interpreter 模式 Iterator 模式 Mediator 模式 Memento 模式 Observer 模式 State 模式 Strategy 模式 Template Method 模式 Visitor 模式
<dl><dt>多執行緒模式</dt></dl> 在很多應用中都會使用多執行緒,尤其是在Web應用中,多執行緒以 Gof 整理的模式為基礎,考量多執行緒環境中,如何組合這些基本模式來完成多執行緒安全要求。
Guarded Suspension 模式 Producer Consumer 模式 Worker Thread 模式 Thread-Per-Message 模式 Future 模式 Read-Write-Lock 模式 Two-phase Termination 模式 Thread-Specific Storage 模式
<dl><dt>參考資料</dt></dl> 以下是以Java實作設計模式的介紹網站,從下面的連結開始,當中您可以找到更多設計模式的資源。
Huston Design Pattern The Design Patterns Java Companion 闆 橋裡人的 Java 設計模式學習心得 UML 軟體工程組織