抽象工廠模式 設計模式3之抽象工廠模式

2021-10-12 07:43:53 字數 2476 閱讀 5568

工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。

然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。

那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。

我們總結下:

「工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的產品,可以說是工廠方法模式的公升級版」

如上圖,小公尺音響和蘋果音響為同乙個產品。而小公尺手機和小公尺音響為同一產品族。

那麼什麼情況下可以使用抽象工廠模式?

使用抽象工廠模式一般要滿足以下條件。

抽象工廠模式同工廠方法模式結構一樣,需要抽象產品,抽象工廠,具體產品,具體工廠4部分組成。

結構圖如下:

這個圖你可能看著頭暈,我們用**來表示:

首先建立抽象工廠abstractfactory

public inte***ce abstractfactory
然後在建立兩個抽象產品

/** * 手機 */public inte***ce product1 /** * 音響 */public inte***ce product2
然後建立具體產品

public class concreteproduct11 implements product1 }public class concreteproduct12 implements product1 }public class concreteproduct21 implements product2 }public class concreteproduct22 implements product2 }
再建立具體工廠concretefactory1用來生產小公尺產品【小公尺-手機,小公尺-音響】

/** * description: 小公尺工廠 * * @author lvshen * @since jdk 1.8 */public class concretefactory1 implements abstractfactory     public product2 newproduct2() }
concretefactory1用來生產蘋果產品【蘋果-手機,蘋果-音響】

/** * description: 蘋果工廠 * * @author lvshen * @since jdk 1.8 */public class concretefactory2 implements abstractfactory     public product2 newproduct2()    }
測試

我們使用小公尺工廠,生產小公尺手機

@slf4jpublic class factorytest }
測試結果

我們再來用蘋果工廠生產蘋果音響

@slf4jpublic class factorytest }
測試結果

當新增一條產品族時,只需要新增乙個工廠即可。比如新增華為手機,華為音響,我們就需要需新增華為工廠。

如果新增新產品等級的產品,那麼就需要修改工廠。假如我們新增了手環產品,比如小公尺手環,蘋果手環,華為手環。那麼,每個工廠都需要修改。這並不滿足閉開原則。

我們再總結下什麼情況下會使用抽象工廠模式:

「系統中有多個產品族,但每次只使用其中的某一族產品。比如我就喜歡專門使用小公尺的手機和手環系統中提供了產品的類庫,且所有產品的介面相同,客戶端不依賴產品例項的建立細節和內部結構」

同工廠模式一樣,抽象工廠模式的優點在於,我們不需要知道產品是如何建立的。要獲取產品物件,通過工廠就可以獲取。做到了很好的封裝。

如果產品族類的產品與產品之間存在約束,比如小公尺手環和小公尺手機有一定的約束【小公尺手環需要與小公尺手機配對才能啟用小公尺手環(這裡我瞎說,只是舉個栗子)】。那麼可以在小公尺工廠內做出約束,使用者並不需要知道內部如如何約束。

我們再來列舉乙個使用場景

如乙個文字編輯器和乙個處理器,都是軟體實體,但是linux下的文字編輯器和windows下的文字編輯器雖然功能和介面都相同,但是**實現是不同的,處理器也有類似情況。也就是具有了共同的約束條件:作業系統型別。於是我們可以使用抽象工廠模式,產生不同作業系統下的編輯器和處理器。

設計模式之工廠模式(簡單工廠 工廠模式 抽象工廠)

參考博文 侵權必刪 什麼是工廠模式 通過 物件建立 模式繞開new,來避免物件建立 new 過程中所導致的緊耦合 依賴具體類 適用性 使用new建立物件且導致緊耦合的場景。思考 物件導向程式設計要以動態的思維去看待 換句話說,在看 時需要時間概念,發現 在未來的穩定之處和變化之處。一般介面和抽象類是...

設計模式之工廠模式 3 抽象工廠模式

使用抽象工廠模式完成披薩案例 是乙個抽象工廠模式的抽象層 public inte ce absfactory public class bjfactory implements absfactory else if ordertype.equals pepper return pizza publi...

設計模式之3 抽象工廠模式

抽象工廠模式 之前我們在學習工廠模式中,如果要增加乙個產品,那麼就會同時增加乙個具體產品類和對應的具體工廠類,這會導致系統中的類數量成對的增加,加重系統的負擔。而對於有些場景下我們使用的是一系列的類,這個時候我們就可以考慮將一些相關的產品組成乙個產品 產品族 然後由同乙個工廠來統一生產。在工廠模式中...