(轉)設計模式 抽象工廠模式

一、前言

抽象工廠模式,創建型設計模式之一。抽象工廠起源於以前對不同操作系統的圖形化解決方案,如不同操作系統中的按鈕和文本框控件其實現不同,展示效果也不一樣,對於每一個操作系統,其本身就構成一個產品類,而按鈕和文本框控件也構成一個產品類,兩種產品類兩種變化,各自有自己的特性。

二、定義

抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口,無須指定它們具體的類。

三、適用場景

1、客戶端(應用層)不依賴於產品類實例如何被創建、實現等細節
2、強調一系列相關的產品對象(屬於同一產品族)一起使用創建對象需要大量重複的代碼
3、提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴於具體實現

 

 

爲了更好理解產品等級結構與產品族,我們看兩張圖,
 
屏幕快照 2019-04-24 下午6.53.25.png
 
屏幕快照 2019-04-24 下午6.53.50.png

橫着一行是一個產品族,豎着一列是一個產品等級結構。

還用上篇文章工廠方法模式中例子,現在不僅要錄視頻還要手記,如Java手記、Python手記等,要是按照工廠模式,需要創建Java手記類、python手記類、Java手記工廠、python 手記工廠、手記工廠類,很容易發生類爆炸情況。其中Java視頻、python 視頻是一個產品等級都是視頻,Java手記、python手記又是一個產品等級,Java視頻和Java手記是同一產品族。

四、代碼實戰

首先創建Java產品族的視頻和手記類,還有Java產品工廠,

 
屏幕快照 2019-04-23 下午5.06.55.png
 
屏幕快照 2019-04-23 下午5.12.01.png
 
屏幕快照 2019-04-23 下午5.07.13.png
 
屏幕快照 2019-04-23 下午5.07.31.png
 
屏幕快照 2019-04-23 下午5.08.21.png
然後創建python產品族的視頻和手記,還有手記工廠,
 
屏幕快照 2019-04-23 下午5.10.52.png
 
屏幕快照 2019-04-23 下午5.11.01.png
 
屏幕快照 2019-04-24 下午7.12.59.png

再然後創建工廠,
 
屏幕快照 2019-04-23 下午5.13.09.png
測試,
 
屏幕快照 2019-04-23 下午5.13.52.png
雖然抽象工廠方法模式的類比較多,但是,主要分爲4類。
AbstractFactory:抽象工廠角色,如CourseFactory類,它聲明瞭一組用於創建一種產品的方法,每一個方法對應一種產品,如創建視頻和創建手記。
ConcreteFactory:具體工廠角色,如JavaCourseFactory和PythonCourseFactory類,它實現了在抽象工廠中定義的創建產品的方法,生成一組具體產品,這些產品構成了一個產品族,每一個產品都位於某個產品等級結構中。
AbstractProduce:抽象產品角色,如Video和Article類,它爲每種產品聲明接口。
ConcreteProduce:具體產品角色,如JavaVideo、JavaArticle、PythonVideo和PythonArticle類,它定義具體工廠生產的具體產品對象,實現抽象產品接口中聲明的業務方法。

 

五、總結

1、優點

(1)具體產品在應用層代碼隔離,無須關心創建細節
(2)將一系列的產品族統一到一起創建

2、缺點

(1)規定了所有可能被創建的產品集合,產品族中擴展新的產品困難,需要修改抽象工廠的接口
(2)增加了系統的抽象性和理解難度



作者:南小夕
鏈接:https://www.jianshu.com/p/7a56b7bafbb9
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章