23種設計模式之——抽象工廠模式


什么是抽象工廠模式?

提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。

抽象工廠模式有哪些優點?

1、最大的好處便是易於交換產品系列,由於具體工廠類,在一個應用中只需要在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同產品配置。

2、它讓具體的創建實例過程與客戶端分離,客戶端是通過它們的抽象接口操作實例,產品的具體類名也被具體工廠的實現分離,不會出現在客戶代碼中。

 

如果項目使用的是MySQL數據,現在如果需要更換為Oracle數據,為了靈活更換數據庫,如何設計程序呢?

接下來通過抽象工廠模式模仿數據訪問程序。

抽象工廠模式實現:

構建兩張數據庫表的對應類,只聲明,不做任何操作。

Name類:

Type類:

為兩張表創建相應的實現類:

IUser接口,用於客戶端訪問,解除與具體數據庫訪問的耦合:

IType接口,用於客戶端訪問,解除與具體數據庫訪問的耦合:

MySQLUser類,用於訪問MySQL的User表:

OracleUser類,用於訪問Oracle的User表:

同理創建相應的MySQL和Oracle數據庫的Type表。

MySQLType類,用於訪問MySQL的Type表:

OracleType類,用於訪問Oracle的Type表:

接下來再讓我們構建一個IFactory接口,定義一個訪問User表對象和Type對象的抽象的工廠接口。

MySQLFactory類,實現IFactory接口,實例化MySQLUser和MySQLType。

OracleFactory類,實現IFactory接口,實例化OracleUser和OralceType。

客戶端代碼:

只需確認實例化哪一個數據庫訪問對象給factory。

運行結果如下:

只需要更改IFactory factory = new MySQLFactory() 為IFactory factory = new OracleFactory() ,就實現了數據庫訪問的切換了。

有一個User類和User操作類的時候,是只需要工廠方法模式,但是現在顯然你數據中有很多的表,而MySQL和Oracle有時兩大不同的分類,所以解決這種涉及到多個產品系列的問題,就需要抽象工廠模式了。

抽象工廠模式的優點與缺點:

優點:

1、易於交換產品系列,由於具體工廠類,在一個應用中只需要在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。

2、它讓具體的創建實例過程與客戶端分離,客戶端是通過它們的抽象接口操縱實例,產品的具體類名也被具體工廠的實現分離,不會出現在客戶代碼中。

缺點:

如果要增加一個項目表Project,那么就需要增加三個類,IProject,MySQLProject,OracleProject,還需要改動IFactory,MySQLFactory,OracleFactory才可以完全實現。這樣是很糟糕的。

編程是門藝術,這樣大批量的改動,顯然是非常丑陋的做法。

解決方案:可以使用簡單工廠來改進抽象工廠。去除IFactory、MySQLFactory、OracleFactory三個工廠類,用一個DataAcces類代替,用一個簡單工廠模式來實現。具體實現代碼省略,有興趣的小伙伴可以自己實現。

喜歡的小伙伴們可以搜索我們個人的微信公眾號“程序員的成長之路”點擊關注或掃描下方二維碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM