非關(guān)語(yǔ)言: 設計模式
程式設計是思維具體化的一種方式,是思考如何解決問(wèn)題的過(guò)程,設計模式是在解決問(wèn)題的過(guò)程中,一些良好思路的經(jīng)驗集成,最早講設計模式,人們總會(huì )提到
Gof 的著(zhù)作,它最早將經(jīng)典的 23 種模式集合在一起說(shuō)明,對後期學(xué)習程式設計,尤其是對從事物件導向程式設計的人們起了莫大的影響。
後來(lái)設計模式一詞被廣泛的應用到各種經(jīng)驗集成,甚至還有反模式(AntiPattern),反模式教導您如何避開(kāi)一些常犯且似是而非的程式設計思維。
這邊的話(huà)將整理一些設計模式學(xué)習心得,實(shí)作的部份是使用Java,因而您會(huì )看到一些與 Gof 模式不同的圖及實(shí)作方式,這是為了善用一些Java本身的特性,至於C++的實(shí)作方面,Gof 的書(shū)已經(jīng)給了不少的例子。
在一些模式的實(shí)作上,您會(huì )發(fā)現我用了介面(interface)來(lái)取代抽象類(lèi)別(Abstract class),這與原先的Gof書(shū)中的範例會(huì )不儘相同,這是因為在C++中沒(méi)有介面,一個(gè)完全沒(méi)有實(shí)作任何方法的抽象類(lèi)別,根據當時(shí)描述的主題特性,可以的話(huà)會(huì )將之換為介面,在語(yǔ)義上會(huì )較符合Java語(yǔ)言的特性,但是您要知道的是,介面與完全沒(méi)有實(shí)作任何方法的抽象類(lèi)別在某些時(shí)候是可以互換的。
在這邊所看到的
UML 圖都是使用
Jude 繪製的,Jude 是一個(gè)純 Java 撰寫(xiě)的 UML 工具程式,可運行與 Windows、Linux 等多個(gè)平臺,體積小,使用簡(jiǎn)易。
- Gof 模式
以下的設計模式則是我個(gè)人從 Gof 學(xué)習中的個(gè)人體會(huì )與實(shí)作,並增加幾個(gè)導入或衍生的簡(jiǎn)單模式。
物件的產(chǎn)生需要消耗系統資源,所以如何有效率的產(chǎn)生、管理與操作物件,一直都是值得討論的課題, Creational 模式即與物件的建立相關(guān),在這個(gè)分類(lèi)下的模式給出了一些指導原則及設計的方向。
如何設計物件之間的靜態(tài)結構,如何完成物件之間的繼承、實(shí)現與依賴(lài)關(guān)係,這關(guān)乎著(zhù)系統設計出來(lái)是否健壯(robust):像是易懂、易維護、易修改、耦合度低等等議題。Structural 模式正如其名,其分類(lèi)下的模式給出了在不同場(chǎng)合下所適用的各種物件關(guān)係結構。
物件之間的合作行為構成了程式最終的行為,物件之間若有設計良好的行為互動(dòng),不僅使得程式執行時(shí)更有效率,更可以讓物件的職責更為清晰、整個(gè)程式的動(dòng)態(tài)結構(像是物件調度)更有彈性。
- 多執行緒模式
在很多應用中都會(huì )使用多執行緒,尤其是在Web應用中,多執行緒以 Gof 整理的模式為基礎,考量多執行緒環(huán)境中,如何組合這些基本模式來(lái)完成多執行緒安全要求。
- 參考資料
以下是以Java實(shí)作設計模式的介紹網(wǎng)站,從下面的連結開(kāi)始,當中您可以找到更多設計模式的資源。