作者曾于美國花旗銀行(Citibank)、湯臣金融(Thomson Financial)、奧本海默基金(Oppenheimer)等處供職,進行了多年的軟件開發、架構設計和技術管理工作。
閻宏博士對面向對象理論和設計模式有精到的見解,對中國的古典智慧也有深厚的積淀,更為難得的是能夠把兩者融洽地結合起來。閱讀閻宏博士的文章,你會發現文章中處處閃爍著作者智慧的光點。閻宏博士著有《Java與模式》一書,本專欄編輯了閻宏博士的幾篇文章和書中的一些章節,以饗讀者。
您閱讀后有什么感想,歡迎在JR論壇中發貼和大家討論。同時,也可以與作者聯系:JavaPatterns@hotmail.com。
1. 什么是模式
什么是模式,這是一個看上去簡單,但是又非常不簡單的問題。我見過很多人,學習模式理論已經很長時間了,但是并不真正理解這一點。
模式理論的基本思想其實起源于中國,是中國文化的固有思想。你,我,我們中每一個自幼受到中國思想熏陶的人,都自然具有這一基本思想。模式的思想存在于中國文化的各個角落,包括哲學、法律,醫學,兵法,體育,文學,直到我們行為處事的方式。
模式的思想,長期以來不存在于西方思考方式中,至今也不是西方文化的主流思想。因此學習模式,切忌以西方式的思路學習。不然的話,緣木求魚,事倍功半。
簡單地講,所謂模式,就是得到很好研究的范例。設計模式,就是設計范例。在孫子兵法中,充斥著各種模式。孫子說,“至于死地而后生”,就是戰爭模式。三十六計,條條都是模式,比如“走為上”,“空城計”也都是戰爭模式。
這些模式中的每一個都具有典型意義,具有學習價值。通過研究這些模式,學習者可以相互交流,可以在自己的實踐中舉一反三,推陳出新,加以應用。
在我們參加高考的時候,老師給我們很多的典型題目,作為練習使用。這些題目一般來說不會在高考中原封不動地出現,但是這些題目會有一些內容啟發我們的思考,可以讓我們舉一反三,從而為考試做好準備。
模式不是框架(Framework),也不是過程。模式也不是簡單的“問題的解決方案”,因為模式必須是典型問題的解決方案,是可以讓學習者舉一反三的,有研究價值、有交流價值,有自己的名字的例子。
模式不能套用。不要以為在任何一個系統中都要使用某些設計模式。系統的設計也不是含有設計模式就好,更不是含有越多的設計模式就越好。
在《三國演義》中,馬恕就套用了“至于死地而后生”的戰爭模式,最后倒了大霉。在高考中,你如果把老師交給你的典型題目答案倒背如流,在一個個放到考試卷子上去,放得越多,恐怕你就離考上大學越遠。
比如你喜歡三十六計,如果你在執行某項軍事任務的時候,千方百計地將盡可能多的三十六計用到里面,每次都來一個“走為上”,那么你的朋友和敵人都會覺得某名奇妙。如果你非三十六計中的計謀不用,或者認為非三十六計中的策略不算好策略,那么別人只能認為你不懂三十六計的精髓。
中國傳統醫學也是一樣,有時看上去癥狀相似的病,卻要使用不同的處方,即所謂辨證用藥。如果每次給病人看病,都要捧出某本醫案,將盡可能多的著名醫案用到你的病人身上,恐怕過不了多久就麻煩大了。
中國古代的法律,就是案例法;也就是需要法官在研習案例的基礎之上,舉一反三,適當發揮。開個玩笑,如果你喜歡上“軋美案”,逢美必軋,恐怕需要及早做好該行的準備。
關于模式的理論的起源、歷史,以及模式理論與中國文化的淵源、哲學思想,設計模式背后的OO設計原則,二十幾個設計模式的詳細講解,他們在Java語言中如何實現,如何在自己的系統設計中舉一反三、推陳出新,以及Java語言本身使用了什么設計模式,可以看一看我的新書《Java與模式》(電子工業出版社出版)。
簡單工廠(Simple Factory)模式
本文是作者的新書《Java與模式》的節選,主要內容如下:
第12章? 簡單工廠(Simple Factory)模式
12.1? 工廠模式的幾種形態
12.2? 簡單工廠模式的引進
12.3? 簡單工廠模式的結構
12.4? 簡單工廠模式的實現
12.5? 簡單工廠模式與其他模式的關系
12.6? 模式的優點和缺點
12.7? 簡單工廠模式在Java中的應用
12.8? 女媧摶土造人
請在下面打開pdf文件閱讀本文
簡單工廠(Simple Factory)模式
工廠方法(Factory Method)模式
第13章? 工廠方法(Factory Method)模式
13.1? 引言
13.2? 工廠方法模式的結構
13.3? 工廠方法模式在農場系統中的實現
13.4? 關于工廠方法模式的實現
13.5? Java語言中工廠方法模式的例子
13.6? 工廠方法模式與其他模式的關系
13.7? 女媧舉繩造人
13.8? 其他的例子
請在下面打開pdf文件閱讀本文
工廠方法(Factory Method)模式
抽象工廠(Abstract Factory)模式
本文是作者的新書《Java與模式》的節選,主要內容如下:
第14章? 抽象工廠(Abstract Factory)模式
14.1? 引言
14.2? 問題
14.3? 抽象工廠模式的結構
14.4? 在什么情形下應當使用抽象工廠模式
14.5? 抽象工廠模式在農場系統中的實現
14.6? 抽象工廠模式的另一個例子
14.7? “開-閉”原則
14.8? 關于模式的實現
14.9? 女媧造萬物的故事
請在下面打開pdf文件閱讀本文
抽象工廠(Abstract Factory)模式
單例(Singleton)模式
第15章? 單例(Singleton)模式
15.1? 引言
15.2? 單例模式的結構
15.3? 在什么情況下使用單例模式
15.4? 單例類的狀態
15.5? 一個實用的例子:屬性管理器
15.6? Java語言中的單例模式
15.7? 專題:不完全的單例類
15.8? 相關模式
15.9? 附錄:雙重檢查成例的研究
15.10? 給讀者的一點建議
請在下面打開pdf文件閱讀本文
單例(Singleton)模式
單例模式與MX記錄
本文是作者的新書《Java與模式》的節選,講解如何將單例模式應用到實際系統設計中去,主要內容如下:
第16章? 專題:單例模式與MX記錄
16.1? 問題與解決方案
16.2? 目錄服務與MX記錄
16.3? JNDI架構介紹
16.4? 如何使用JNDI編程
16.5? 系統設計
16.6? 討論
請在下面打開pdf文件閱讀本文
單例模式與MX記錄
多例(Multiton)模式與多語言支持
第17章? 專題:多例(Multiton)模式與多語言支持
17.1? 引言
17.2? 多例模式
17.3? 多語言項目的設計
請在下面打開pdf文件閱讀本文
多例(Multiton)模式與多語言支持
序列鍵生成器與單例及多例模式
本文是作者的新書《Java與模式》的節選,講解單例(Singleton)及多例(Multiton)模式以及如何將它們應用到實際系統設計中去,主要內容如下:
第18章? 專題:序列鍵生成器與單例及多例模式
18.1? 問題
18.2? 將單例模式應用到系統設計中
18.3? 將多例模式應用到系統設計中
18.4? 討論
請在下面打開pdf文件閱讀本文
序列鍵生成器與單例及多例模式
《Java與模式》的目錄
閻宏博士
《Java與模式》作者
www.WebEndsHere.com(或者http://218.6.168.109/jeffyan77)
JavaPatterns@yahoo.com