一、前言
抽象工廠模式,創建型設計模式之一。抽象工廠起源於以前對不同操作系統的圖形化解決方案,如不同操作系統中的按鈕和文本框控件其實現不同,展示效果也不一樣,對於每一個操作系統,其本身就構成一個產品類,而按鈕和文本框控件也構成一個產品類,兩種產品類兩種變化,各自有自己的特性。
二、定義
抽象工廠模式提供一個創建一系列相關或相互依賴對象的接口,無須指定它們具體的類。
三、適用場景
1、客戶端(應用層)不依賴於產品類實例如何被創建、實現等細節
2、強調一系列相關的產品對象(屬於同一產品族)一起使用創建對象需要大量重複的代碼
3、提供一個產品類的庫,所有的產品以同樣的接口出現,從而使客戶端不依賴於具體實現
爲了更好理解產品等級結構與產品族,我們看兩張圖,
橫着一行是一個產品族,豎着一列是一個產品等級結構。
還用上篇文章工廠方法模式中例子,現在不僅要錄視頻還要手記,如Java手記、Python手記等,要是按照工廠模式,需要創建Java手記類、python手記類、Java手記工廠、python 手記工廠、手記工廠類,很容易發生類爆炸情況。其中Java視頻、python 視頻是一個產品等級都是視頻,Java手記、python手記又是一個產品等級,Java視頻和Java手記是同一產品族。
四、代碼實戰
首先創建Java產品族的視頻和手記類,還有Java產品工廠,
再然後創建工廠,
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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。