設計模式之 五 工廠方法模式

2021-05-24 12:07:39 字數 2029 閱讀 2317

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...