23中設計模式之抽象工廠模式

2021-09-22 02:11:38 字數 1432 閱讀 1551

定義: 為建立一組相關或互相依賴的物件提供乙個介面,而且無須制定它們的具體類

兩個產品族, 其類圖如下:

抽象產品類**如下:

產品a的1級和2級類**如下:

產品b與產品a類似

抽象工廠類 abstractcreator 的職責是定義 每個工廠要實現的功能,其**如下:

如何建立產品,則是由具體的實現類來完成的, creator1 和 creator2**如下:

這樣在使用時,我們只要知道它的工廠方法就可以直接產生乙個產品物件,無需關心它的實現類

優點如下;

封裝性,每個產品的實現類不是高層模組要關心的,他只要關心介面、抽象,不關心物件是如何建立的. 如何建立由工廠負責.

產品族內的約束為非公開狀態. 抽象工廠模式應該有乙個約束, 每生產乙個a產品,同時生產2個b產品, 這樣的生產過程對呼叫工廠類的高層模組來說是透明的, 高層模組不需要知道這個約束, 只要給出乙個具體的產品即可

缺點如下:

產品族擴充套件非常困難.例如,要增加乙個產品, 抽象工廠類要增加乙個方法, 其所有實現類都要增加方法, 這嚴重違反了開閉原則. 修改之後, 只要與這段**有關係,就有可能產生影響

注意: 我們說抽象工廠模式的產品族擴充套件比較困難,但是產品等級擴充套件是非常容易的, 增加乙個產品等級, 只要增加乙個工廠類負責新增加出來的產品生產任務即可.

乙個物件族(或是一組沒有任何關係的物件)都有相同的約束,則可以使用抽象工廠模式.

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

抽象工廠模式是乙個簡單的模式,使用的場景非常多,在軟體產品生產過程中,涉及不同作業系統的時候,都可以考慮使用抽象工廠模式, 例如乙個應用, 需要在三個不同平台(windows, linux, android)上執行, 就可以通過抽象工廠模式遮蔽掉作業系統對應用的影響. 三個不同作業系統上的軟體功能、應用邏輯、ui都應該是非常類似的, 唯一不同的是呼叫不同的工廠方法,由不同的產品類去處理與作業系統互動的資訊

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

定義 為建立一組相關或者是相互依賴的物件提供介面,而不需要指定它們的具體類 使用場景 乙個物件族有相同的約束時可以使用抽象工廠模式。類圖 抽象工廠模式與工廠方法模式的區別 抽象工廠模式是工廠方法模式的公升級版本,他用來建立一組相關或者相互依賴的物件。他與工廠方法模式的區別就在於,工廠方法模式針對的是...

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

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類 相比入工廠模式而言,如果說工廠模式支援增加任意產品。那麼抽象工廠模式增加新的產品線很容易,但是無法增加新的產品。而簡單工廠模式和工廠模式的區別可以認為工廠模式是優化了簡單工廠模式,遵循了開閉原則 public inte ce com...

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

抽象工廠模式定義 提供乙個建立一系列的相關的或者依賴的物件的介面,無需指定它們的具體實現類,具體的時間分別在子類工廠中產生。優點 隔離了具體類的生產實現,使得替換具體的工廠實現類很容易。包含模組有 1.抽象產品介面 定義產品的介面,公共的暴露方法。便於實際的產品類實現。2.具體的產品類 包含實際產品...