設計模式 工廠方法模式

2022-02-02 19:49:43 字數 2828 閱讀 7193

工廠方法模式(factory method),定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使用乙個類的例項化延遲到其子類。根據依賴倒轉原則,我們把工廠類抽象出乙個介面,這個介面只有乙個方法,就是建立抽象產品的工廠方法。然後,所有的要生產具體類的工廠,就去實現這個介面,這樣,乙個簡單工廠模式的工廠類,變成了乙個工廠抽象介面和多個具體生成物件的工廠。我們在要增加新的功能,就不需要更改原有的工廠類了,只需要增加此功能的運算類和相應的工廠類就可以了。這樣整個工廠和產品系其實都沒有修改的變化,而只有擴充套件的變化,這就完全符合了開發-封閉原則。

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端**來進行。你想要加功能,本來是改工廠類的,而現在是修改客戶端。

簡單工廠模式的最大有點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。但是簡單工廠模式違背了開放-封閉原則。而工廠方法克服了違背開放-封閉原則的缺點,又保持了封閉物件建立過程的優點,他們集中封裝物件的建立,使得要更換物件時,不需要做大的改動就可實現,降低了客戶程式和產品物件的耦合。工廠方法模式是簡單工廠模式的進一步抽象和推廣。由於使用了多型性,工廠方法模式保持了簡單工廠模式的優點,而且克服了它的缺點。但缺點是由於每增加乙個產品,就需要加乙個產品工廠的類,增加了額外的開發量。

加減乘除類

class operationadd:public

operation

operationadd(

double numa,double

numb):operation(numa,numb){}

double

getresult()

};class operationsub:public

operation

operationsub(

double numa,double

numb):operation(numa,numb){}

double

getresult()

};class operationmul:public

operation

operationmul(

double numa,double

numb):operation(numa,numb){}

double

getresult()

};class operationdiv:public

operation

operationdiv(

double numa,double

numb):operation(numa,numb){}

double

getresult()

result=get_numbera()/get_numberb();

return

result;

}};//

工廠介面

class

ifactory;//

加減乘除工廠類

class addfactory:public ifactory,public

operation

addfactory(

double numa,double

numb):operation(numa,numb){}

operation *createoperation()

};class subfactory:public ifactory,public

operation

subfactory(

double numa,double

numb):operation(numa,numb){}

operation *createoperation()

};class mulfactory:public ifactory,public

operation

mulfactory(

double numa,double

numb):operation(numa,numb){}

operation *createoperation()

};class divfactory:public ifactory,public

operation

divfactory(

double numa,double

numb):operation(numa,numb){}

operation *createoperation()

};int

main()

設計模式 工廠方法模式

一 工廠方法 factory method 模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到工廠子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角...

設計模式 工廠方法模式

1 factorymethod.h ifndef factorymethod h define factorymethod h include include using namespace std class osproduct 產品,product,產品的抽象類 class windowspro...

設計模式 工廠方法模式

框架的基礎知識 對框架的理解 框架和設計模式的關係 工廠方法模式 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個類的例項化延遲到其子類。結構 產品 public inte ce product 具體產品 public class productimpl...