抽象工廠模式

2021-08-27 22:11:35 字數 1251 閱讀 4985

abstract factory pattern 抽象工廠模式

乙個工廠類介面 定義建立方法

乙個抽象工廠類實現工廠類 定義公共方法

多個具體工廠類繼承抽象工廠類  實現具體建立的方法

抽象工廠模式的優點

抽象工廠模式的缺點

抽象工廠模式的最大缺點就是產品族擴充套件非常困難,為什麼這麼說呢?我們以通用**為例,如果要增加乙個產品c,也就是說有產品家族由原來的2個,增加到3個,看看我們的程式有多大改動吧!抽象類abstractcreator要增加乙個方法createproductc(),然後,兩個實現類都要修改,想想看,這在專案中的話,還這麼讓人活!嚴重違反了開閉原則,而且我們一直說明抽象類和介面是乙個契約,改變契約,所有與契約有關係的**都要修改,這段**叫什麼?叫「有毒**」,——只要這段**有關係,就可能產生侵害的危險!

抽象工廠模式的使用場景

抽象工廠模式的使用場景定義非常簡單:乙個物件族(或是一組沒有任何關係的物件)都有相同的約束,則可以使用抽象工廠模式,什麼意思呢?例如乙個文字編輯器和乙個處理器,都是軟體實體,但是*nix下的文字編輯器和windows下的文字編輯器雖然功能和介面都相同,但是**實現是不同的,處理器也是類似情況,也就是具有了共同的約束條件:作業系統型別,於是我們可以使用抽象工廠模式,產生不同作業系統下的編輯器和處理器。

抽象工廠模式的注意實現

在抽象工廠模式的缺點中,我們提到抽象工廠模式的產品族擴充套件比較困難,但是一定要清楚是產品族擴充套件困難,而不是產品等級,在該模式下,產品等級是非常容易擴充套件的,增加乙個產品等級,只要增加乙個工廠類負責新增加出來的產品生產任務即可,也就是說橫向擴充套件容易,縱向擴充套件困難。以人類為例子, 產品等級中只要男、女兩個性別,現實世界還有一種性別:雙性人,即使男人也是女人(俗語就是陰陽人),那我們要擴充套件這個產品等級也是非常容易的,增加三個產品類,分別對應不同的膚色,然後再建立乙個工廠類,專門負責不同膚色人的雙性人的建立任務,完全通過擴充套件來實現的需求的變更,從這一點上看,抽象工廠模式是符合開閉原則的。

最佳實踐

乙個模式在什麼情況下才能夠使用,是很多讀者比較困惑的地方,抽象工廠模式是乙個簡單的模式,使用的場景非常多,大家在軟體產品開發過程中,涉及到不同作業系統的時候,都可以考慮使用抽象工廠模式,例如乙個應用,需要在三個不同平台上執行:windows、linux、android(google發布的智慧型終端作業系統)上執行,你會怎麼設計?分別設計三套不同的應用?非也非也,通過抽象工廠模式遮蔽掉作業系統對應用的影響。三個不同作業系統上的軟體功能、應用邏輯、ui都應該是非常類似,唯一不同的是呼叫不同的工廠方法,由不同的產品類去處理與作業系統互動的資訊。

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

工廠模式 抽象工廠模式

這裡使用簡單的話來講解工廠模式,不涉及程式設計 什麼是工廠模式呢?我的理解是對抽象介面例項的封裝。假如有乙個介面,有若干的實現類,代表不同的例項。傳統產生物件的方法是直接new乙個出來,對於每個例項都要new,當實現介面的類較多時會很麻煩,並且類的實現也暴露出來了。工廠模式是一種產生物件的模式,使用...

工廠模式 抽象工廠模式

子類父類代換 場景 在不同的條件下,需要建立不同的實現子類時。如網路通訊可以使用tcp udp。可以實現同乙個介面,通過工廠類根據條件 tcp或udp 來例項化不同的子類。這些子類符合黎克特制代換原則。public inte ce tlprotocol public class tcpimpleme...