工廠三兄弟之抽象工廠模式(一)

Liuwei-Sunny發表於2013-07-13

       工廠方法模式通過引入工廠等級結構,解決了簡單工廠模式中工廠類職責太重的問題,但由於工廠方法模式中的每個工廠只生產一類產品,可能會導致系統中存在大量的工廠類,勢必會增加系統的開銷。此時,我們可以考慮將一些相關的產品組成一個“產品族”,由同一個工廠來統一生產,這就是我們本文將要學習的抽象工廠模式的基本思想。

 

1 介面皮膚庫的初始設計

       Sunny軟體公司欲開發一套介面皮膚庫,可以對Java桌面軟體進行介面美化。為了保護版權,該皮膚庫原始碼不打算公開,而只向使用者提供已打包為jar檔案的class位元組碼檔案。使用者在使用時可以通過選單來選擇皮膚,不同的皮膚將提供視覺效果不同的按鈕、文字框、組合框等介面元素,其結構示意圖如圖1所示:

1 介面皮膚庫結構示意圖

       該皮膚庫需要具備良好的靈活性和可擴充套件性,使用者可以自由選擇不同的皮膚,開發人員可以在不修改既有程式碼的基礎上增加新的皮膚。

       Sunny軟體公司的開發人員針對上述要求,決定使用工廠方法模式進行系統的設計,為了保證系統的靈活性和可擴充套件性,提供一系列具體工廠來建立按鈕、文字框、組合框等介面元素,客戶端針對抽象工廠程式設計,初始結構如圖2所示:

2 基於工廠方法模式的介面皮膚庫初始結構圖

       在圖2中,提供了大量工廠來建立具體的介面元件,可以通過配置檔案更換具體介面元件從而改變介面風格。但是,此設計方案存在如下問題:

       (1) 當需要增加新的皮膚時,雖然不要修改現有程式碼,但是需要增加大量類,針對每一個新增具體元件都需要增加一個具體工廠,類的個數成對增加,這無疑會導致系統越來越龐大,增加系統的維護成本和執行開銷;

       (2) 由於同一種風格的具體介面元件通常要一起顯示,因此需要為每個元件都選擇一個具體工廠,使用者在使用時必須逐個進行設定,如果某個具體工廠選擇失誤將會導致介面顯示混亂,雖然我們可以適當增加一些約束語句,但客戶端程式碼和配置檔案都較為複雜。

       如何減少系統中類的個數並保證客戶端每次始終只使用某一種風格的具體介面元件?這是Sunny公司開發人員所面臨的兩個問題,顯然,工廠方法模式無法解決這兩個問題,彆著急,本文所介紹的抽象工廠模式可以讓這些問題迎刃而解。

 

【作者:劉偉 http://blog.csdn.net/lovelion

相關文章