程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計模式之綜述篇

Java設計模式之綜述篇

編輯:關於JAVA

自從J2EE出現以來,就大大簡化了在Java下的企業級開發。但是隨著J2EE越來越普遍地被應用到各個領域中,開發者們漸漸意識到需要一種方法來標准化應用程序的開發過程,他們采用的方法是標准化應用程序的結構層。在結構層通常封裝了一些獨立於業務邏輯的復雜技術,以便在業務邏輯和底層的架構之間建立起弱連接。在個專題中將會介紹一些設計模式,通過利用這些設計模式,開發人員可以達到標准化和簡化應用程序開發過程的目的。

應用程序結構和J2EE

J2EE是一個很成功的技術,它為一些基本的任務提供了一致的標准,例如數據庫連接、分布式應用程序等。但是使用J2EE並不能保證開發人員開發出成功的應用程序。有些人認為J2EE本身就是一種框架技術,但是這種認識是不正確的,我們應該意識到J2EE並沒有提供一個能夠幫助開發人員開發出高質量應用程序的框架,因此很多有經驗的開發人員通過利用設計模式來彌補這一缺項。

設計模式

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

J2EE設計模式

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

軟件開發設計模式

軟件開發設計模式又被分為兩種,一種是通用的面向對象設計模式。例如工廠(Factory)模式是一種面向對象的設計模式,它將對象的創建封裝起來,使對象能夠重用,這樣就可以減少程序占用的系統資源。而另一種是基於Java的設計模式,這些設計模式要麼是和Java的語言特性結合得很緊,要麼是面向對象技術在Java中的深化。不要以為軟件設計模式相對獨立於J2EE就認為它們不重要,通常它們比J2EE設計模式更重要。這是因為:

1)J2EE設計模式是近幾年才出現的,並且在不斷變化,而軟件開發設計模式經過了長時間的考驗,比前者更加成熟和完善;

2)有些J2EE設計模式是建立在某些軟件開發設計模式之上的;

3)軟件開發模式為J2EE設計模式提供了堅實的基礎。它的應用將影響到整個結構的穩定性和可擴充性。

在實際應用中,設計模式並不是一段具體的代碼。設計模式通常是在設計說明書中描述。將設計模式應用到系統中的真正挑戰在於如何在系統中應用模式中的思想。這些思想必須被應用到恰當的環境中。

根據設計模式的所解決的問題,又可以分為以下幾個類型:

創建類型:創建類型的模式都是用於創建類的實例。但是和通過new來創建實例不同,這些模式提供了更加靈活的方式,是程序能夠根據特定的情況創建特定的類。

結構類型:結構類型的模式幫助開發人員將簡單對象組合在一起以後的更加復雜的結構。

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

創建類型的模式

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

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

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

創建類型的模式包括:

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

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

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

原型模式(Prototype Pattern):原型模式通過對類的實例進行拷貝來創建新的實例。

單一模式(Singleton Pattern):根據單一模式實現的類只允許有一個是類,並且提供了一個全局指針來引用該實例。

結構類型的模式

結構類型的模式將類和對象組合起來,以構成更加復雜的結構。它又被劃分為類模式和對象模式。類模式和對象模式之間的區別在於類模式通過繼承關系來提供有效的接口;而類模式通過對象合成或將對象包含在其它對象中的方式構成更加復雜的結構。

結構類型的模式包括了以下模式:

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

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

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

代理模式(Proxy Pattern):代理模式利用一個簡單的對象替代一個復雜的對象,當復雜對象在需要的時候才會被加載到系統中,這樣可以節約系統資源,提高系統的響應速度。在網絡環境中這種模式很有用處。

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

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

正面模式(Fa?ade Pattern):正面模式將復雜的類層次結構組織起來,通過一個簡單的接口來獲得層次結構中的數據。

行為類型的模式

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

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

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

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

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

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

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

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

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

狀態模式(State Pattern):狀態模式將一個類實例的變量保存在獨立的內存空間中。

迭代模式(Iterator Pattern):迭代模式在不知道數據的內部表現形式的前提下,通過標准的接口來遍歷數據集合中的數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved