北大青鳥IT教育博客

           

          Java設(shè)計(jì)模式之綜述篇

            自從J2EE出現(xiàn)以來,就大大簡化了在Java下的企業(yè)級開發(fā)。但是隨著J2EE越來越普遍地被應(yīng)用到各個領(lǐng)域中,開發(fā)者們漸漸意識到需要一種方法來標(biāo)準(zhǔn)化應(yīng)用程序的開發(fā)過程,他們采用的方法是標(biāo)準(zhǔn)化應(yīng)用程序的結(jié)構(gòu)層。在結(jié)構(gòu)層通常封裝了一些獨(dú)立于業(yè)務(wù)邏輯的復(fù)雜技術(shù),以便在業(yè)務(wù)邏輯和底層的架構(gòu)之間建立起弱連接。北大青鳥武漢魯廣校區(qū)將為大家介紹一些設(shè)計(jì)模式,通過利用這些設(shè)計(jì)模式,開發(fā)人員可以達(dá)到標(biāo)準(zhǔn)化和簡化應(yīng)用程序開發(fā)過程的目的。

            設(shè)計(jì)模式

            在開發(fā)人員的圈子中,大家通過相互交流在開發(fā)過程中所遇到的問題以及解決方法來豐富整個圈子的經(jīng)驗(yàn)。而設(shè)計(jì)模式就是在這樣的情況下產(chǎn)生的。一個設(shè)計(jì)模式必然是針對某個特定的問題的,這個問題的解決方案以及這樣解決問題產(chǎn)生的后果。在解決利用J2EE進(jìn)行程序開發(fā)中出現(xiàn)的問題的過程中,人們把設(shè)計(jì)模式分為兩類,一種是通用開發(fā)模式,一種是為了解決特定的J2EE問題的模式。下面讓我們來看一看每一種類型的開發(fā)模式都包含了哪些內(nèi)容。

            應(yīng)用程序結(jié)構(gòu)和J2EE

            J2EE是一個很成功的技術(shù),它為一些基本的任務(wù)提供了一致的標(biāo)準(zhǔn),例如數(shù)據(jù)庫連接、分布式應(yīng)用程序等。但是使用J2EE并不能保證開發(fā)人員開發(fā)出成功的應(yīng)用程序。有些人認(rèn)為J2EE本身就是一種框架技術(shù),但是這種認(rèn)識是不正確的,我們應(yīng)該意識到J2EE并沒有提供一個能夠幫助開發(fā)人員開發(fā)出高質(zhì)量應(yīng)用程序的框架,因此很多有經(jīng)驗(yàn)的開發(fā)人員通過利用設(shè)計(jì)模式來彌補(bǔ)這一缺項(xiàng)。

            J2EE設(shè)計(jì)模式

            J2EE設(shè)計(jì)模式在過去幾年中隨著Java開發(fā)人員經(jīng)驗(yàn)的不斷成長而發(fā)展。這些設(shè)計(jì)模式是針對使用各種J2EE技術(shù)時可能出現(xiàn)的問題提出的,它們能夠幫助開發(fā)人員構(gòu)造出應(yīng)用程序框架的要求。例如,F(xiàn)ront Controller(前端控件)模式將servlet代碼的開發(fā)轉(zhuǎn)化為在圖形用戶界面下的開發(fā)。但是需要記住J2EE設(shè)計(jì)模型解決了那些在J2EE項(xiàng)目中最可能出現(xiàn)的問題。如果你在J2EE遇到的問題很特殊,很有可能沒有相應(yīng)的設(shè)計(jì)模型來解決它。

            軟件開發(fā)設(shè)計(jì)模式

            軟件開發(fā)設(shè)計(jì)模式又被分為兩種,一種是通用的面向?qū)ο笤O(shè)計(jì)模式。例如工廠(Factory)模式是一種面向?qū)ο蟮脑O(shè)計(jì)模式,它將對象的創(chuàng)建封裝起來,使對象能夠重用,這樣就可以減少程序占用的系統(tǒng)資源。而另一種是基于Java的設(shè)計(jì)模式,這些設(shè)計(jì)模式要么是和Java的語言特性結(jié)合得很緊,要么是面向?qū)ο蠹夹g(shù)在Java中的深化。不要以為軟件設(shè)計(jì)模式相對獨(dú)立于J2EE就認(rèn)為它們不重要,通常它們比J2EE設(shè)計(jì)模式更重要。這是因?yàn)椋?/p>

            1)J2EE設(shè)計(jì)模式是近幾年才出現(xiàn)的,并且在不斷變化,而軟件開發(fā)設(shè)計(jì)模式經(jīng)過了長時間的考驗(yàn),比前者更加成熟和完善;

            2)有些J2EE設(shè)計(jì)模式是建立在某些軟件開發(fā)設(shè)計(jì)模式之上的;

            3)軟件開發(fā)模式為J2EE設(shè)計(jì)模式提供了堅(jiān)實(shí)的基礎(chǔ)。它的應(yīng)用將影響到整個結(jié)構(gòu)的穩(wěn)定性和可擴(kuò)充性。

            在實(shí)際應(yīng)用中,設(shè)計(jì)模式并不是一段具體的代碼。設(shè)計(jì)模式通常是在設(shè)計(jì)說明書中描述。將設(shè)計(jì)模式應(yīng)用到系統(tǒng)中的真正挑戰(zhàn)在于如何在系統(tǒng)中應(yīng)用模式中的思想。這些思想必須被應(yīng)用到恰當(dāng)?shù)沫h(huán)境中。

            根據(jù)設(shè)計(jì)模式的所解決的問題,又可以分為以下幾個類型:

            · 創(chuàng)建類型:創(chuàng)建類型的模式都是用于創(chuàng)建類的實(shí)例。但是和通過new來創(chuàng)建實(shí)例不同,這些模式提供了更加靈活的方式,是程序能夠根據(jù)特定的情況創(chuàng)建特定的類。

            · 結(jié)構(gòu)類型:結(jié)構(gòu)類型的模式幫助開發(fā)人員將簡單對象組合在一起以后的更加復(fù)雜的結(jié)構(gòu)。

            · 行為類型:行為類型的模式幫助開發(fā)人員控制類之間的通訊。

            創(chuàng)建類型的模式

            所有創(chuàng)建類型的模式都和如何有效地創(chuàng)建類的實(shí)例相關(guān)。在Java中,如果開發(fā)人員要生成一個類的實(shí)例,最簡單的方法是使用new關(guān)鍵字:

            MyFoo = new Foo(); // 生成一個Foo的實(shí)例

            這種方法只能夠在程序中生成固定的類。但是在很多情況下,程序需要根據(jù)不同的情況生成不同的類的實(shí)例,這就需要將實(shí)例的生成過程抽象到一個特殊的創(chuàng)建類中,由該類在運(yùn)行時決定生成哪種類的實(shí)例。這樣使得程序有更好的靈活性和通用性。

            創(chuàng)建類型的模式包括:

            · 工廠模式(Factory Pattern):根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個類的實(shí)例,而這一組類有一個公共的抽象父類。

            · 抽象工廠模式(Abstract Factory Pattern):抽象工廠模式也可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個類的實(shí)例,而這一組類有一個公共的抽象父類。只不過它定義的是一個接口。

            · 構(gòu)造者模式(Builder Pattern):構(gòu)造者模式將一個復(fù)雜對象的構(gòu)造過程和它的表現(xiàn)層分離開來,這樣類就可以根據(jù)不同情況展現(xiàn)出不同的表現(xiàn)方式。

            · 原型模式(Prototype Pattern):原型模式通過對類的實(shí)例進(jìn)行拷貝來創(chuàng)建新的實(shí)例。

            · 單一模式(Singleton Pattern):根據(jù)單一模式實(shí)現(xiàn)的類只允許有一個是類,并且提供了一個全局指針來引用該實(shí)例。

            行為類型的模式

            行為類型的模式主要是那些處理對象之間通訊的模式,該類型的包括以下模式:

            · 職責(zé)鏈模式(Chain of Responsibility):職責(zé)鏈模式將請求傳遞給一組對象,只有特定的對象才會處理該請求。這樣就進(jìn)一步削弱類之間的聯(lián)系。

            · 命令模式(Command Pattern):命令模式將請求傳遞給特定的對象,這樣客戶端即使在不知道服務(wù)器端如何處理請求的情況下也可以發(fā)送請求。

            · 模板模式(Template Pattern):模板模式提供了對算法的抽象定義。

            · 策略模式(Strategy Pattern): 策略模式定義了一組算法,將每個算法都封裝起來,并且使它們之間可以互換。策略模式使這些算法在客戶端調(diào)用它們的時候能夠互不影響地變化。

            · 觀測者模式(Observer Pattern):觀測者模式可以在發(fā)生變化時將變化通知多個類。

            · 中介模式(Mediator Pattern):中介模式可以通過一個中間類來控制若干個類之間的通訊,并且這些類相互之間不需要了解對方的信息。

            · 回憶模式(Memento Pattern):回憶模式可以在不破壞對象封裝性的前提下保存和恢復(fù)對象的內(nèi)部狀態(tài)。

            · 訪問者模式(Visitor Pattern):訪問者模式通過一個訪問類來訪問其他類中的數(shù)據(jù)。

            · 狀態(tài)模式(State Pattern):狀態(tài)模式將一個類實(shí)例的變量保存在獨(dú)立的內(nèi)存空間中。

            · 迭代模式(Iterator Pattern):迭代模式在不知道數(shù)據(jù)的內(nèi)部表現(xiàn)形式的前提下,通過標(biāo)準(zhǔn)的接口來遍歷數(shù)據(jù)集合中的數(shù)據(jù)。

            結(jié)構(gòu)類型的模式

            結(jié)構(gòu)類型的模式將類和對象組合起來,以構(gòu)成更加復(fù)雜的結(jié)構(gòu)。它又被劃分為類模式和對象模式。類模式和對象模式之間的區(qū)別在于類模式通過繼承關(guān)系來提供有效的接口;而類模式通過對象合成或?qū)ο蟀谄渌鼘ο笾械姆绞綐?gòu)成更加復(fù)雜的結(jié)構(gòu)。

            結(jié)構(gòu)類型的模式包括了以下模式:

            · 適配器模式(Adapter Pattern):適配器模式可以將一個類的接口和另一個類的接口匹配起來。

            · 橋梁模式(Bridge Pattern):橋梁模式對客戶端程序提供一個固定的接口,但是允許開發(fā)人員變化實(shí)際的實(shí)現(xiàn)類。這樣開發(fā)人員就可以將接口是具體的實(shí)現(xiàn)類分離開來。

            · 復(fù)合模式(Composite Pattern):復(fù)合模式可以將多個對象進(jìn)行復(fù)合,其中的每個對象可以是簡單對象,也可以是復(fù)合對象。

            · 代理模式(Proxy Pattern):代理模式利用一個簡單的對象替代一個復(fù)雜的對象,當(dāng)復(fù)雜對象在需要的時候才會被加載到系統(tǒng)中,這樣可以節(jié)約系統(tǒng)資源,提高系統(tǒng)的響應(yīng)速度。在網(wǎng)絡(luò)環(huán)境中這種模式很有用處。

            · 修飾模式(Decorator Pattern):通過修飾模式,開發(fā)人員可以在運(yùn)行時將特定的功能綁定在對象上。

            · 輕量模式(Flyweight Pattern):輕量模式通過將對象中的一部分?jǐn)?shù)據(jù)保存在對象外,在調(diào)用對象中的方法時再將這些數(shù)據(jù)傳回對象。這樣做可以減少大量比較簡單的對象占用的空間。

            · 正面模式(Facade Pattern):正面模式將復(fù)雜的類層次結(jié)構(gòu)組織起來,通過一個簡單的接口來獲得層次結(jié)構(gòu)中的數(shù)據(jù)。

          posted on 2009-09-26 15:02 武漢北大青鳥 閱讀(73) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          默認(rèn)

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玛曲县| 精河县| 广德县| 龙山县| 丰顺县| 饶河县| 韶关市| 吐鲁番市| 都江堰市| 康乐县| 阿鲁科尔沁旗| 安乡县| 湟源县| 宝兴县| 邻水| 郸城县| 平阴县| 东乌珠穆沁旗| 涿州市| 乌拉特中旗| 达拉特旗| 布尔津县| 丰顺县| 依安县| 昭觉县| 秦皇岛市| 长子县| 罗山县| 叶城县| 扬州市| 礼泉县| 山阴县| 内江市| 渭源县| 宜丰县| 铜鼓县| 大悟县| 即墨市| 安达市| 蚌埠市| 龙江县|