設計模式之工廠方法模式VS簡單工廠方法模式

2022-03-21 08:52:45 字數 1951 閱讀 4275

名詞解釋:

簡單工廠:這個實在是沒什麼解釋的,就是乙個工廠類,然後有乙個方法,根據傳遞的引數可以通過switch(你也可以是if,或者是使用高階的反射 )來進行物件的建立。

工廠方法:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。

區別:簡單工廠的優點是工廠類中包含了邏輯(即通過判斷,例項化對應的型別),對於客戶端來說去除了與具體產品的依賴。但是如果有了新功能則就需要修改這個判斷的邏輯(也就是違背了開放-封閉原則),所以這個也是工廠方法出現的必要性。工廠方法呢每乙個類都有自己的工廠,當然也有抽象的工廠基類,這樣客戶端想例項哪種型別,只需例項化其對應的工廠即可。

必要元素:

實體類的抽象類(也可以是介面)、抽象工廠類(可以是介面)、各種實體類(繼承自抽象類或者實現自介面)、各種實體工廠(繼承自抽象工廠類或者實現自介面)。

上例子:

實體抽象類以及各個實體類:

abstract

class

operation

public

double numberb

public

abstract

double

getresult();

}class

operationadd:operation

}class

operationdiv:operation

}class

operationmul:operation

}class

operationsub:operation

}

抽象工廠類和各個實體工廠類:

abstract

class

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工廠方法模式

這兩天在看 大話設計模式 這本書很有意思,容易讓人理解,但是看久了,設計模式種類看多了,也會容易混,容易記不清楚,所以我們應該過一段時間停下腳步,總結一下。幫助我們理解,記憶。常常駐足進行總結,顆粒歸倉才是我們的收穫。最近看到了簡單工廠模式和工廠方法模式,從名字上看這麼的相似,越相似月不容易找到他們...