工廠方法模式舉個例子來說,加減乘除4個具體運算類(concreteproduct)其實就是依賴於抽象運算類(product),而返回加減乘除具體運算類,又是由依賴於抽象運算工廠類(creator)的加減乘除4個工廠類(concreteproduct)一對一返回。
而抽象工廠模式,假設車床生產兩種不同的產品a跟產品b,那麼車床可以當成乙個工廠類,如此,當有車床a跟車床b都可以生產產品a跟產品b,那麼車床a跟車床b操作方法不一樣。使用車床a生產產品a(product1 a)跟產品b(product1 b)依賴於(abstractproduct1),使用車床b生產產品a(product2 a )跟產品b(product2 b)依賴於(abstractproduct2),而車床a(concretefactorya)跟車床b(concretefactoryb)依賴於抽象車床(abstractfactory),並有車床a跟b返回對應的產品a跟b的操作方法。其實也就是在工廠方法的基礎上多了多個工廠,並這些工廠依賴於抽象工廠。如此當加產品c時,那麼需要多出兩個車床各自生成產品c的類,並且為抽象車床、車床a、車床b新增生成產品c的方法,又需要進行新增這些類,又需要修改,做法會顯得很醜陋。
如此可以使用簡單工廠模式+抽象工廠模式進行簡化
使用簡單工廠通過switch進行判斷是使用車床a還是車床b進行生產,返回生產產品a跟產品b的方法,而客戶端只需要呼叫簡單工廠的建立產品方法,當需要更換車床時,只需要進入簡單工廠設定switch引數即可,這樣客戶端的**時可以不變動的。
這樣就省去了抽象工廠模式上述繁多的類,還使得客戶端**可以省去改動。但是這樣還是不完善的,當增加車床時,還是需要進入簡單工廠中的switch新增case,沒有做到「開放-封閉」。
這個時候可以使用反射+配置檔案進行配合簡單工廠中switch需要的引數,動態呼叫方法即可,這樣只需要修改配置檔案,**完全不需要修改。**參考:
總結自:《大話設計模式》抽象工廠模式
設計模式之簡單工廠 工廠方法模式 抽象工廠模式
這裡講三種模式放在一起說明,是因為三種模式關聯性很強 抽象工廠模式簡單化以後就是工廠方法模式,工廠方法模式再簡單化就是簡單工廠模式 簡單工廠模式並沒有被列入到gof的設計模式中 public class factory 簡單工廠類,實現建立產品物件 class factory return prod...
設計模式(簡單工廠模式 工廠模式 抽象工廠模式)
當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...
Java 設計模式 簡單工廠 工廠模式 抽象工廠
工廠模式,實際上也會根據業務情景不同會有不同的實現方式。一般分為3種。簡單工廠,工廠模式和抽象工廠。顧名思義,這三種從簡單到抽象,名稱越來越高大上,實現方式肯定是越來越複雜 結論1 三種工廠的實現越來越複雜 public class factory public iproduct getproduc...