2023年3月8日 星期二 〖農曆 辛卯 免年 二月初四〗 晴
設計模式之
五、工廠方法模式factory method
適用範圍:
定義乙個用於建立物件的介面,讓子類去決定例項化哪乙個物件。
例如:運算操作例項。
我們可以在具體的每乙個實現工廠中去決定,例項化哪乙個操作,即加法?減法?乘法運算?
工廠方法模式與簡單工廠模式的區別:
簡單工廠模式最大的優點在於,工廠類中飲食了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。
工廠方法模式的結構圖
c++關鍵**如下:
1、介面類:iproduct
提供純虛函式:
virtual void operation() = 0;
2、具體的實現類:cconcreteproduct.cpp
void cconcreteproduct::operation()
3、工廠介面類ifactory
提供純虛函式
virtaul cproduct *createfactory() = 0;
4、工廠具體實現類:cconcretefactory.cpp
cproduct *cconcretefactory::createfactory()
5、客戶端**:main.cpp
ifactory *fac = new cconcretefactory();
iproductv *pro = fac->createfactory();
pro->operation();
if ( fac != null)
delete fac;
if ( pro != null )
delete pro;
}例項:運算操作利用工廠方法模式來實現。
工廠方法模式結構圖如下:
c++關鍵**如下:
1、運算類介面:ioperation
提供了乙個純虛函式:
public:
virtual double getresult() = 0;
protected:
double m_num1;
double m_num2;
ioperation.cpp
void ioperation::setnumber(double num1, double num2)
2、具體的運運算元類,加法運算:cadd.cpp
double cadd::getresult()
3、具體的運運算元類,減法運算:csub.cpp
double csub::getresult()
4、其它類似,不重複。
...5、工廠類介面:ifactory
提供了純虛函式
virtual ioperation *createfactory() = 0;
6、具體的子工廠類,加法工廠:caddfactory.cpp
ioperation *caddfactory::createfactory()
7、具體的子工廠類,減法工廠:csubfactory.cpp
ioperation *csubfactory::createfactory()
8、其它工廠類類似,不重複。
....
9、客戶端實現main.cpp
ifactory *fac = new caddfactory();
ioperation *oper = fac->createfactory();
oper->setnumber(1,2);
cout<
oper1->setnumber(1,2);
cout<
if(fac != null)
delete fac;
if (oper != null)
delete oper;
if( fac1 != null)
delete fac1;
if(oper1 != null)
delete oper1;
}以上。
設計模式之五工廠方法模式
與簡單工廠模式的區別 簡單工廠模式在增加新操作時,需要更改工廠函式,違反了開放與封閉原則 而工廠方法模式支援擴充套件,在修改時只需要新增新的操作類和工廠類即可,但客戶端也需要作相應的修改 includeusing namespace std 用乙個單獨的類來做這個創造例項的過程,即工廠 class ...
設計模式(五) 工廠方法模式
工廠方法模式,定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。我們依舊以之前的電腦程式來闡述工廠方法模式 不了解簡單工廠的童鞋戳這裡 1.如下 using system namespace factorymethod set public double n...
設計模式 工廠模式之工廠方法模式
工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...