什么是設(shè)計(jì)模式
20世紀(jì)60年代的軟件危機(jī)使得人們開始重視軟件工程的研究。起初,人們把軟件設(shè)計(jì)的重點(diǎn)放在數(shù)據(jù)結(jié)構(gòu)和算法的選擇上。隨著軟件系統(tǒng)規(guī)模越來越大、越來越復(fù)雜,整個(gè)系統(tǒng)的結(jié)構(gòu)和規(guī)格說明也顯得越來越重要。面對(duì)日益復(fù)雜的軟件系統(tǒng),人們開始認(rèn)識(shí)到,要真正實(shí)現(xiàn)軟件的工業(yè)化生產(chǎn)方式,達(dá)到軟件產(chǎn)業(yè)發(fā)展所需要的軟件生產(chǎn)率和質(zhì)量,軟件復(fù)用是一條現(xiàn)實(shí)可行的途徑。
1995年,《Design Pattern》(中譯“設(shè)計(jì)模式”)一書問世,成為面向?qū)ο缶幊讨惺褂媚J交椒ǖ拈_創(chuàng)性著作。這本書對(duì)于軟件實(shí)踐中的一些不斷變換面孔重復(fù)出現(xiàn)、但特征和解決方案的本質(zhì)卻十分類似的問題進(jìn)行了總結(jié)歸納,提煉出23個(gè)具有代表性的模式。設(shè)計(jì)模式本身并不是一種具體的“技術(shù)”,它講述的是思想。它不僅僅展示了接口或抽象類在實(shí)際案例中的靈活應(yīng)用和智慧,還讓開發(fā)人員能夠真正掌握接口或抽象類的應(yīng)用。更重要的是,該書提煉的這些設(shè)計(jì)模式反復(fù)強(qiáng)調(diào)的宗旨是盡量提高程序的使用率,讓程序盡可能的可重用。
Java中的設(shè)計(jì)模式
Java語(yǔ)言作為面向?qū)ο缶幊陶Z(yǔ)言的優(yōu)秀代表,它擁有簡(jiǎn)單易用的特性,以及強(qiáng)大的功能,非常有利于設(shè)計(jì)模式的實(shí)施。Java發(fā)展到現(xiàn)在,按應(yīng)用主要分為三大塊:J2SE、J2ME和J2EE,這也就是Sun ONE(Open Net Environment)體系。J2SE就是Java2的標(biāo)準(zhǔn)版,主要用于桌面應(yīng)用軟件的編程;J2ME主要應(yīng)用于嵌入式系統(tǒng)開發(fā),如手機(jī)和PDA的編程;J2EE是Java2的企業(yè)版,主要用于大型分布式網(wǎng)絡(luò)程序的開發(fā),如電子商務(wù)網(wǎng)站和ERP系統(tǒng)。Java技術(shù)已經(jīng)逐漸成為電子商務(wù)主流技術(shù)之一。在Java的各個(gè)平臺(tái)中,設(shè)計(jì)模式有很多精彩的應(yīng)用,而且隨著Java技術(shù)的不斷發(fā)展,設(shè)計(jì)模式也在不斷豐富。
J2SE與設(shè)計(jì)模式
早期發(fā)布的設(shè)計(jì)模式主要來自桌面應(yīng)用軟件的開發(fā)經(jīng)驗(yàn)。在《Design Pattern》一書中,所有的模式都是通過面向桌面應(yīng)用的窗口程序來舉例說明的。相應(yīng)的在J2SE中,貫穿了設(shè)計(jì)模式的思想,尤其是大量運(yùn)用了MVC模式。
所謂MVC模式,是指模型(Model)、視圖(View)和控制(Control)相分離的設(shè)計(jì)方案。模型(Model)是執(zhí)行某些任務(wù)的代碼。至于這些任務(wù)以什么形式顯示給用戶,卻并不是模型所關(guān)注的問題。模型只有純粹的功能性的接口,也就是一系列的公開方法。這些方法有的是取值方法,讓系統(tǒng)其它部分可以得到模型端的內(nèi)部狀態(tài)參數(shù);有的是改值方法,允許外部修改模型的內(nèi)部狀態(tài)。
視圖決定模型以什么樣的方式顯示給用戶。一個(gè)模型可以對(duì)應(yīng)多個(gè)視圖,那么對(duì)于視圖而言,模型就是可重用的代碼。一般來說,模型內(nèi)部必須留下所有對(duì)應(yīng)視圖的記錄,以便在模型的狀態(tài)發(fā)生改變的時(shí)候,可以通知視圖。模型的狀態(tài)一旦發(fā)生改變,所有對(duì)應(yīng)的視圖都能夠得到更新。
控制是和視圖聯(lián)合使用的。用戶在與視圖發(fā)生交互的時(shí)候,是通過控制器來操縱模型,從而向模型傳遞數(shù)據(jù)、更新模型的狀態(tài)。
例如,一個(gè)表格數(shù)據(jù)體可以看作是一個(gè)模型,它可以對(duì)應(yīng)成為多種視圖,比如餅圖、棒圖或者直接顯示成為一個(gè)表格。用戶通過鍵盤和鼠標(biāo)與視圖進(jìn)行交互,從而激發(fā)相應(yīng)的控制器改變表格數(shù)據(jù)。一旦表格數(shù)據(jù)發(fā)生變化,視圖會(huì)得到通知,進(jìn)而更新顯示的形式。
MVC模式是最著名的模式之一。J2SE中一些復(fù)雜的顯示控件(如表格、列表、樹等),都使用了這種模式,從而使得設(shè)計(jì)結(jié)構(gòu)非常清晰而且靈活。當(dāng)然,也有人提出,MVC模式不應(yīng)當(dāng)被稱為“設(shè)計(jì)模式”,而應(yīng)當(dāng)屬于“架構(gòu)模式”。它可以看作若干個(gè)設(shè)計(jì)模式的組合,并且在不同的應(yīng)用環(huán)境中衍生出了其它的一些設(shè)計(jì)模式。但是在各種討論中,MVC模式還是常常被當(dāng)作設(shè)計(jì)模式。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |