名詞解釋:
簡單工廠:這個實在是沒什麼解釋的,就是乙個工廠類,然後有乙個方法,根據傳遞的引數可以通過switch(你也可以是if,或者是使用高階的反射 )來進行物件的建立。
工廠方法:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。
區別:簡單工廠的優點是工廠類中包含了邏輯(即通過判斷,例項化對應的型別),對於客戶端來說去除了與具體產品的依賴。但是如果有了新功能則就需要修改這個判斷的邏輯(也就是違背了開放-封閉原則),所以這個也是工廠方法出現的必要性。工廠方法呢每乙個類都有自己的工廠,當然也有抽象的工廠基類,這樣客戶端想例項哪種型別,只需例項化其對應的工廠即可。
必要元素:
實體類的抽象類(也可以是介面)、抽象工廠類(可以是介面)、各種實體類(繼承自抽象類或者實現自介面)、各種實體工廠(繼承自抽象工廠類或者實現自介面)。
上例子:
實體抽象類以及各個實體類:
abstractclass
operation
public
double numberb
public
abstract
double
getresult();
}class
operationadd:operation
}class
operationdiv:operation
}class
operationmul:operation
}class
operationsub:operation
}
抽象工廠類和各個實體工廠類:
abstractclass
operationfactory
class
operationaddfactory : operationfactory
}class
operationsubfactory : operationfactory
}class
operationmulfactory : operationfactory
}class
operationdivfactory:operationfactory
}
客戶端使用:
operation operation =factory.creationoperation();operation.numbera = 2
; operation.numberb = 4
;
double result =operation.getresult();
console.writeline(result);
factory = new
operationsubfactory();
operation =factory.creationoperation();
operation.numbera = 4
; operation.numberb = 2
; result =operation.getresult();
console.writeline(result);
這樣,如果我們有新的型別出現,則增加實體類,並且增加實體類的工廠即可,在客戶端就可以直接使用新的工廠建立新的型別了。
總結:
工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現實體的建立,選擇判斷的問題還是存在,也就是說工廠方法把簡單工廠內部邏輯判斷移到了客戶端**來實現,之前如果要增加型別,修改的是工廠類,現在直接修改客戶端即可(當然如果增加了某乙個型別,也是需要增加其相對應的工廠類)。
設計模式 工廠方法模式 VS簡單工廠模式
定義 簡單工廠模式 簡單工廠 工廠方法模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法是乙個類的例項化延遲到其子類。個人理解 簡單工廠 根據客戶端的選擇進行動態的例項化物件,也就是根據使用者的需求來例項化具體的物件。工廠方法 定義乙個用來建立物件的工廠介面,然後讓具體的工廠子類來...
設計模式 簡單工廠VS工廠方法
簡單工廠 簡單工廠,就是用乙個單獨的類來創造例項的過程。簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端和選擇條件例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。運算簡單工廠類 public class operationfactory return oper 工廠方法 工...
簡單工廠模式VS工廠方法模式
這兩天在看 大話設計模式 這本書很有意思,容易讓人理解,但是看久了,設計模式種類看多了,也會容易混,容易記不清楚,所以我們應該過一段時間停下腳步,總結一下。幫助我們理解,記憶。常常駐足進行總結,顆粒歸倉才是我們的收穫。最近看到了簡單工廠模式和工廠方法模式,從名字上看這麼的相似,越相似月不容易找到他們...