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