毫無疑問,設計模式于己于他人于系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。
GoF的“設計模式”是第一次將設計模式提升到理論高度,并將之規范化,本書提出了23種基本設計模式,自此,在可復用面向對象軟件的發展過程中,新的大量的設計模式不斷出現。
設計模式和框架
現在,可復用面向對象軟件系統現在一般劃分為三大類:應用程序 工具箱和框架(Framework),我們平時開發的具體軟件都是應用程序;java的API屬于工具箱;而框架是構成一類特定軟件可復用設計的一組相互協作的類。EJB(EnterPRise JavaBeans)是Java應用于企業計算的框架.
框架通常定義了應用體系的整體結構 類和對象的關系等等設計參數,以便于具體應用實現者能集中精力于應用本身的特定細節。框架主要記錄軟件應用中共同的設計決策,框架強調設計復用,因此框架設計中必然要使用設計模式.
另外,設計模式有助于對框架結構的理解,成熟的框架通常使用了多種設計模式,假如你熟悉這些設計模式,毫無疑問,你將迅速把握框架的結構,我們一般開發者假如忽然接觸EJB J2EE等框架,會覺得非凡難學,難把握,那么轉而先把握設計模式,無疑是給了你剖析EJB或J2EE系統的一把利器。
EJB中的設計模式
下面我們從設計模式的角度看看EJB的框架是怎樣的?在這之前假設你已經大概了解了設計模式。專門的設計模式闡述請見我的設計模式之系列.
EJB是采取多層結構,原先我們數據庫開發基本是應用程序(商業邏輯運算)直接調用數據庫驅動,在EJB中,為將商業邏輯計算和數據庫截然分開,使用多個結構式模式:Adapter模式和Bridge模式等.這樣做的好處顯然有三個:
1.分離了商業邏輯層和數據訪問層;
2.能同時支持多個數據庫;
3.但數據庫類型更換時,不會設計到商業邏輯代碼的大量修改.
EJB中將對數據庫進行調用(如發出select等語句)稱為會話bean(sessionbean),而將對應數據庫一個個記錄的bean稱為實體bean(Entity bean);由這兩種類型的bean完成對數據庫的訪問.
會話bean一般和客戶端應用是一一對應,而和數據庫端聯系緊密的是實體bean,EJB在實體bean(或直接在會話bean)和數據庫之間使用了Adapter模式和Bridge模式,無意在實體bean和數據庫之間又多了一層,稱之為DAO(Data access Object ),DAO實際就是設計模式的混合體.
我們以Java的寵物店中的Catalog為例,這是專門處理寵物店中的寵物類別,在對數據庫訪問中,有兩個主要程序:CatalogEJB和CatalogDAO,我們從具體代碼中看看設計模式是怎么應用的.
Bridge模式和Adapter模式
我們首先看看CatalogEJB代碼:
public class CatalogEJB implements SessionBean {
protected CatalogDAO dao;
//從DAO工廠中獲取一個DAO 這是調用工廠(factory)模式的一個實例
public void ejbCreate() {
try {
dao = CatalogDAOFactory.getDAO();
}
catch (CatalogDAOSysException se) {
Debug.println("Exception getting dao " + se);
throw new EJBException(se.getMessage());
}
}
....
}
我們發現在CatalogEJB中并沒有通常的會話bean那樣有對數據庫操作的"select .. from ."等之類SQL操作語句,這些都被封裝到DAO的具體實現中(Concrete class).
在Catalog這個示例中使用了設計模式的Bridge模式,判定是否是某種模式,主要依據其參與者的種類和相互關系,我們先看看Bridge模式的定義和參與者:(未完待續)
新聞熱點
疑難解答