1. 程式人生 > 其它 >設計模式 抽象工廠模式

設計模式 抽象工廠模式

抽象工廠模式(Abstract Factory Pattern):提供一個建立一系列相關的或相互依賴的介面,而無需指定他們具體的類。抽象工廠模式又稱為kit模式。

 模式動機:

    在工廠方法模式中,每一個具體的工廠只對應一種具體的產品,工廠方法具有唯一性,簡單來說就是每一個工廠只能生產一種產品(工廠方法模式),如果我們想要一個工廠生產多個產品那麼我們就需要用到抽象工廠模式

 在介紹抽象工廠的具體流程之前首先需要引入兩個概念產品等級結構產品族

  • 產品等級結構

    產品等級結構即產品的繼承結構,也就是說有一個抽象類是電視機的話,他的子類有海爾電視機、海信電視機、TCL電視機等那麼這個抽象電視機和具體電視機就構成一個產品等級結構。

  • 產品族:

    在抽象工廠模式中,產品族是指由同一個工廠生產的,位於不同的產品登記結構中的一組產品。如海爾工廠可以生產海爾電視機、海爾冰箱、海爾空調,這些海爾工廠生產的東西構成一個產品族。

 抽象工廠模式包括下面四種角色:

  • AbstractFactory:抽象工廠
  • ConcreteFactory:具體工廠
  • AbstractProtect:抽象產品
  • Project:具體產品

  具體流程如下圖所示:具體的產品工廠繼承自抽象的產品工廠,具體的產品繼承自抽象的產品,具體的產品工廠引用具體的產品引用關係為製造關係。客戶端知曉具體的工廠名稱,客戶端持具體方法名稱向抽象工廠傳送請求獲取到一個具體工廠的物件,具體工廠物件可以實現該工廠的產品族中所有產品的製造方法。

抽象工廠模式優點

  •   保證客戶端只是用同一個產品族中的物件工作
  • 增加新的具體工廠和產品族很方便,無需修改已有系統,符合開閉原則

缺點:

  • 難以擴充套件抽象工廠來生產新種類的產品,如果有建立新的產品等級結構那麼需要修改所有抽象工廠的子類去擁有這個方法
  • 開閉原則的傾斜性(增加新的工廠和產品族容易,增加新的產品等級結構麻煩)

工廠模式之間的關聯:

將簡單工廠模式的工廠方法變成一個抽象工廠,其內部實現分別由繼承他的具體工廠實現,簡單工廠模式就變成工廠方法模式,在工廠方法模式中將工廠生產的產品由一個變成多個,工廠方法模式就變成了抽象工廠模式。