何偉文
(廣州科技職業技術學院電子信息系,廣東廣州 510540)
設計可重用的面向對象的軟件是比較困難的。沒有經驗的開發人員常常在選擇中猶豫不決,導致他們采用了非對象技術。設計模式的出現使得重用成功的設計和架構更為容易。設計模式能夠幫助設計人員選擇那些可重用的設計。通過對類、對象交互及其深層次意圖的詳細說明,設計模式甚至能提高現有系統的可維護性和文檔質量。簡言之,設計模式能幫助更快的作出正確的設計,它同樣可以在移動智能系統中加以應用。
1995 年,由著名的“四人組”GOF(Gang of Four)合著的《設計模式——可復用面向對象軟件的基礎》列舉了軟件開發中的23種經典設計模式。時至今日,對整個軟件開發行業影響深遠。在軟件開發中,經過無數開發人員驗證、而且可以解決在特定環境下、重復出現、特定問題的解決方案就是設計模式。使用設計模式是為了可重用代碼,而且模式是經過驗證的代碼模版,可以達到代碼更容易讓人理解、也保證了代碼的高可靠性。設計模式是軟件行業中革命性的成果,是無數開發前輩智慧的結晶,這些模式不僅是經驗的積累也是簡潔高效的解決方案,它覆蓋了軟件開發中具有典型的、有代表性的問題,而且這些模式同樣可以應用于移動智能系統的開發。
設計模式根據模式的目的可分為3大類:(1)創建型模式(2)結構性模式(3)行為性模式
每一大類又有若干子類,下面結合實例重點闡述--抽象工廠模式 (Abstract Factory)在移動應用系統中的應用與改進。
每個模式都是針對一定問題的解決方案。抽象工廠模式面對的問題是多產品等級結構的系統設計。它包括兩個重要的概念:產品族和產品等級。

圖1 多產品等級結構
產品族:是指位于不同產品等級結構中,功能相關聯的產品組成的家族。比如AMD的CPU和ADM芯片的主板,組成一個家族。Intel的CPU和Intel芯片的主板,又組成一個家族。而這兩個家族都來自于兩個產品等級:CPU,主板。一個等級結構是由相同的結構的產品組成,示意圖如圖1:
從上圖可以看出,抽象工廠模式的每個工廠創造出來的都是一族產品,而不是一個或者一組。組是可以隨意組合的! 抽象工廠模式是提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體類。
我們先看一下抽象工廠模式的UML結構圖:(圖2)

圖2 抽象工廠模式UML圖
ConcreteProduct:包括 ProductA和 ProductB,對兩個抽象產品的具體分類的實現。AbstractFactory:抽象工廠接口,它里面應該包含所有的產品創建的抽象方法。ConcreteFactory:包括ConcreteFactoryA和ConcreteFactoryB,具體的工廠,創建具有特定實現的產品對象。
本文以基于Android平臺使用三層結構開發的一個移動智能應用系統,在數據訪問層使用抽象工廠設計模式為例,深入研究對數據訪問、業務邏輯、用戶接口進行分離的技術。
2.3.1 系統需求
這個系統是一款集日程管理、定位追蹤、防盜于一體的手機軟件。其中的日程管理功能需求是對添加的日程要存儲在數據庫中;退出程序后再重新打開,日程數據要從數據庫中讀取,然后把數據填充到ListView中。日程提醒功能可以啟動一個Activity,彈出對話框并提示當前日程的內容信息。具體實現如圖3、4

圖3 日程列表界面


圖4 日程提醒界面
2.3.2 系統架構設計系統的層次結構圖如圖6
圖5系統的層次結構圖
結構圖的最頂層是表現層,它直接跟用戶打交道,而不直接與數據庫進行交互。在這里,我們使用了抽象工廠模式,把創建數據庫訪問層實例的過程與業務層進行了分離,業務層只能通過抽象接口的實現對象進行數據的操作,使得業務層只認識數據訪問的抽象接口。而該接口的實現類對象由工廠對象來生成,這樣,層與層之間不依賴于具體的數據類型,實現了層與層之間的解耦[6]。
2.3.3 系統架構實現
下面我們遵循"抽象工廠模式"的設計思想,實現這個移動智能應用系統。
2.3.3.1 數據庫訪問層DAL
(1)抽象數據庫訪問層IDAL的接口模板。該模板聲明了最基本的數據庫增、刪、改、查功能,主要代碼如下:

(2)抽象工廠接口編寫。這里只需要用到一個數據訪問提供程序createSchedul e-Provider:

(3)、DAL層的實現
首先定義基本提供程序SQLiteBaseProvider把數據訪問提供程序共有的部分抽象出來,然后添加一個類ScheduleProvider,它繼承SQLiteBaseProvider并實現 IDALSchedule,以實現數據訪問中的增、刪、改、查操作。主要代碼如下:

(4)、具體工廠的實現
當封裝好了對數據庫進行訪問的操作后,通過具體工廠提供ScheduleProvider的實例,實現面向接口的編程,也就實現了業務層和數據層之間的解耦。主要代碼如下:

2.3.3.2 業務邏輯層BLL
業務邏輯層的設計是通過具體工廠獲得數據訪問提供程序的實例,并賦值給i-DALSchedule接口,從而使得對數據的操作都通過這個抽象接口來進行,例如:iDALSchedule.selectAll()。主要代碼如下:

2.3.3.3 表現層UI
Schedule類實現了OnItemClickListener接口,并實現了對ListView的Item單擊事件的監聽。主要代碼如下:

綜上所述,抽象工廠設計模式在移動智能系統開發中具有以下的優點:第一,易于交換產品系列,由于具體工廠類,在一個應用中只需要在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易。第二,它讓具體的創建實例與客戶端分離,客戶端是通過它們的抽象接口操縱實例,產品的具體類名也被具體工廠的實現分離,不會出現在客戶端代碼中。抽象工廠模式只是我們認識設計模式的一個開始,我們可以通過更深層次的研究,進一步設計出更多的設計模式,進而更好的適應軟件設計需求與發展。
[1]Alan Shaioway,James R.Trotr.設計模式解析[M];北京:人民郵電出版社,2006.
[2](美)弗里曼(Freeman,E.)等.Oreily Taiwan公司譯head first設計模式[M];北京:中國電力出版社,2007-9-1.
[3]劉振安,董蘭芳,劉燕君.面向對象技術與UML[M].北京:機械工業出版社,2007.
[4]李寧,Android 開發權威指南[M],北京:人民郵電出版社,2011-09-01
[5](美)羅杰,Android應用開發 (李耀亮譯)[M],北京:人民郵電出版社,2010-09-01
[6]Yong-Hua Cheng,Wen-Kuang Kuo,Szu-Lin Su,An Android system design and implementation for Telematics services,Intelligent Computing and IntelligentSystems(ICIS),2010:206210