2011軟考軟件設計師知識點:設計模式與Java
什么是設計模式
20世紀60年代的軟件危機使得人們開始重視軟件工程的研究。起初,人們把軟件設計的重點放在數據結構和算法的選擇上。隨著軟件系統規模越來越大、越來越復雜,整個系統的結構和規格說明也顯得越來越重要。面對日益復雜的軟件系統,人們開始認識到,要真正實現軟件的工業化生產方式,達到軟件產業發展所需要的軟件生產率和質量,軟件復用是一條現實可行的途徑。
1995年,《Design Pattern》(中譯“設計模式”)一書問世,成為面向對象編程中使用模式化方法的開創性著作。這本書對于軟件實踐中的一些不斷變換面孔重復出現、但特征和解決方案的本質卻十分類似的問題進行了總結歸納,提煉出23個具有代表性的模式。設計模式本身并不是一種具體的“技術”,它講述的是思想。它不僅僅展示了接口或抽象類在實際案例中的靈活應用和智慧,還讓開發人員能夠真正掌握接口或抽象類的應用。更重要的是,該書提煉的這些設計模式反復強調的宗旨是盡量提高程序的使用率,讓程序盡可能的可重用。
Java中的設計模式
Java語言作為面向對象編程語言的優秀代表,它擁有簡單易用的特性,以及強大的功能,非常有利于設計模式的實施。Java發展到現在,按應用主要分為三大塊:J2SE、J2ME和J2EE,這也就是Sun ONE(Open Net Environment)體系。J2SE就是Java2的標準版,主要用于桌面應用軟件的編程;J2ME主要應用于嵌入式系統開發,如手機和PDA的編程;J2EE是Java2的企業版,主要用于大型分布式網絡程序的開發,如電子商務網站和ERP系統。Java技術已經逐漸成為電子商務主流技術之一。在Java的各個平臺中,設計模式有很多精彩的應用,而且隨著Java技術的不斷發展,設計模式也在不斷豐富。
J2SE與設計模式
早期發布的設計模式主要來自桌面應用軟件的開發經驗。在《Design Pattern》一書中,所有的模式都是通過面向桌面應用的窗口程序來舉例說明的。相應的在J2SE中,貫穿了設計模式的思想,尤其是大量運用了MVC模式。
所謂MVC模式,是指模型(Model)、視圖(View)和控制(Control)相分離的設計方案。模型(Model)是執行某些任務的代碼。至于這些任務以什么形式顯示給用戶,卻并不是模型所關注的問題。模型只有純粹的功能性的接口,也就是一系列的公開方法。這些方法有的是取值方法,讓系統其它部分可以得到模型端的內部狀態參數;有的是改值方法,允許外部修改模型的內部狀態。
視圖決定模型以什么樣的方式顯示給用戶。一個模型可以對應多個視圖,那么對于視圖而言,模型就是可重用的代碼。一般來說,模型內部必須留下所有對應視圖的記錄,以便在模型的狀態發生改變的時候,可以通知視圖。模型的狀態一旦發生改變,所有對應的視圖都能夠得到更新。
控制是和視圖聯合使用的。用戶在與視圖發生交互的時候,是通過控制器來操縱模型,從而向模型傳遞數據、更新模型的狀態。
例如,一個表格數據體可以看作是一個模型,它可以對應成為多種視圖,比如餅圖、棒圖或者直接顯示成為一個表格。用戶通過鍵盤和鼠標與視圖進行交互,從而激發相應的控制器改變表格數據。一旦表格數據發生變化,視圖會得到通知,進而更新顯示的形式。
MVC模式是最著名的模式之一。J2SE中一些復雜的顯示控件(如表格、列表、樹等),都使用了這種模式,從而使得設計結構非常清晰而且靈活。當然,也有人提出,MVC模式不應當被稱為“設計模式”,而應當屬于“架構模式”。它可以看作若干個設計模式的組合,并且在不同的應用環境中衍生出了其它的一些設計模式。但是在各種討論中,MVC模式還是常常被當作設計模式。
J2EE與設計模式
J2EE屬于一種框架軟件。什么是框架軟件?它不同于以前接觸的Java API等,那些API屬于Toolkit(工具箱)。而J2EE不再被動地被使用、被調用,而是深刻地介入到一個領域中去。J2EE設計的目的是將企業計算應用領域中不變的東西先定義好,比如整體結構和一些主要職責(如數據庫操作、事務跟蹤和安全等),剩余的就是變化的東西,即針對這個領域中具體應用所產生的不同的變化需求,而這些變化的東西就是J2EE程序員所要做的。因此,設計模式和J2EE在思想和動機上是一脈相承的。只不過設計模式更抽象,幾乎可以用于任何應用;J2EE則是適合企業計算應用的框架軟件,而設計模式是它的重要的理論基礎之一。
與此同時,在J2EE的框架下,一些應用級的設計模式也逐步積累了起來,關于設計模式在J2EE中的應用已成為許多論壇討論的熱點之一。其中,J2EE Web應用的架構設計引起了高度的關注。J2EE體系包括JSP、Servlet、EJB、Web服務等多項技術。這些技術的出現給電子商務時代的Web應用開發提供了一個非常有競爭力的選擇。怎樣把這些技術組合起來,形成一個適應項目需要的穩定架構是項目開發過程中非常重要的步驟。此步驟一般由架構設計師完成,設計師根據項目需求,對J2EE體系中的各種技術進行篩選取舍,并考慮到開發過程中的角色分工、后期的運行維護,以及系統擴展性等諸多因素建立系統的架構。一個成功的軟件需要有一個成功的架構,但軟件架構的建立是一個復雜而又持續改進的過程,軟件開發者們不可能對每個不同的項目做不同的架構,而總是盡量重用以前的架構,或開發出盡量通用的架構方案。
在當前的J2EE Web應用中,Apache Struts是最流行的架構方案之一。它實現了MVC模式的概念,并將這些概念映射到Web應用程序的構件和概念中。Struts這個名字來源于在建筑和舊式飛機中使用的支持金屬架,其目的是幫助開發人員減少在運用MVC設計模型開發Web應用的時間。
Apache Struts有以下的優點:一些開發商開始采用并推廣這個框架;作為開源項目,有很多先進的實現思想;對大型應用支持的較好;有集中的網頁導航定義。Apache Struts正在獲得越來越多的關注與支持。
J2ME與設計模式
J2ME標準為消費類產品(例如移動電話、雙向傳呼機和無線個人信息管理器)的應用開發提供支持。這一類產品的特點是,顯示能力和存儲能力有限,計算能力和網絡訪問能力不夠強大。因此,J2ME設計模式就有了它所獨特的問題領域。比如,如果需要顯示比較大的數據集合,那么應該采取什么樣的解決方案,才能適應狹小的顯示區域?又比如,如果需要實現類似桌面軟件的選單選擇的功能,那么應該如何設計才能夠足夠簡練和便于重用?J2ME的設計模式正在逐步的積累過程中,我們相信隨著J2ME的推廣J2ME設計模式的討論也將逐步成為一大關注熱點。
Java與設計模式的結合,為Java的發展帶來了更大的活力,也為設計模式提供了一個寬闊的舞臺。在這些技術的共同推動下,軟件產業將以堅實的步伐走進工業化時代。
【編輯推薦】