設計模式之抽象工廠

2021-06-02 10:48:14 字數 2631 閱讀 3704

首先非常感謝睡仔:工廠模式,我的所有工廠模式的理解均來自於他的部落格思想。

abstractfactory.h

//設計模式之抽象工廠,此方式是在工廠方法的基礎上進一步抽象的結果

/*理解:

世事多變,隨著時間的推移,走過的地方越來越多,你天南海北的朋友也越來越多。

你發現菜原來還分了許多菜系,魯菜、粵菜、湘菜等等,它們各有各的風味,同樣

是紅燒肉由不同菜系出來的味道也各不相同, 你招待不同的朋友要用不同的菜系,

這下難辦了,你的廚師都是魯菜風味,怎麼辦,廣東的朋友來了吃不慣。現在我們

再回到簡單工廠模式,我們把紅燒肉再向下繼承,生成魯菜紅燒肉、粵菜紅燒肉、

湘菜紅燒肉;清蒸魚向下繼承為魯菜清蒸魚、粵菜清蒸魚、湘菜清蒸魚,其它也以此類推。

我們也修改一下老婆的這個類,不讓其返回食物基類,而是返回紅燒肉、清蒸魚、

爆炒空心菜、西紅柿雞蛋湯這一層次,並把這些方法抽象化,作為菜系工廠基類,

然後再從此基類繼承出,魯菜工廠、粵菜工廠、湘菜工廠等等,再由這些具體工廠

實現建立具體菜的工作,哈哈你如果招待廣東朋友就用粵菜工廠,返回的就是一桌

粵菜菜系的紅燒肉、清蒸魚、空心菜和西紅柿雞蛋湯了,你的廣東朋友一定會吃的

非常合乎胃口了。噢,非常好,你已經實現了抽象工廠模式了。

*///定義產品類的基類

class product//cookfood

;class cookingfish : public product

~cookingfish(){}

public:

virtual void cooking();

};class lucaifish : public cookingfish

; ~lucaifish(){}

public:

virtual void cooking();

};class chuancaifish : public cookingfish

~chuancaifish(){}

public:

virtual void cooking();

};class cookingbeef :public product

~cookingbeef(){}

public:

virtual void cooking();

};class lucaibeef:public cookingbeef

~lucaibeef(){};

public:

virtual void cooking();

};class chuancaibeef:public cookingbeef

~chuancaibeef(){}

public:

virtual void cooking();

};class abstractfactory

; virtual ~abstractfactory(){};

public:

virtual cookingfish* createfish() = 0;//做紅燒魚

virtual cookingbeef* createbeef() = 0;//做回鍋肉

};class concretefactorylucai:public abstractfactory

~concretefactorylucai(){}

public:

virtual cookingfish* createfish();

virtual cookingbeef* createbeef();

};class concretefactorychuancai:public abstractfactory

~concretefactorychuancai(){}

public:

virtual cookingfish* createfish();

virtual cookingbeef* createbeef();

};

abstractfactory.cpp

#include #include "abstractfactory.h"

product::product()

product::~product()

void cookingfish::cooking()

void lucaifish::cooking()

void chuancaifish::cooking()

void cookingbeef::cooking()

void lucaibeef::cooking()

void chuancaibeef::cooking()

cookingfish* concretefactorylucai::createfish()

cookingbeef* concretefactorylucai::createbeef()

cookingfish* concretefactorychuancai::createfish()

cookingbeef* concretefactorychuancai::createbeef()

int main()

另外,這篇部落格介紹的非常好,僅供參考:

設計模式之工廠 抽象工廠

一 應用場景 工廠模式應用非常廣泛,意在抽象出一層專職管理物件產生以及物件間的關係,讓我們能夠專注於業務開發 1.不用去寫許許多多的new方法,替換實現類還得挨個修改。2.類中不涉及實現類,物件間只存在介面級別的耦合,客戶端呼叫注入實現類即可。由於工廠模式變種非常多,這裡只講一下常用的簡單工廠和抽象...

抽象工廠模式 設計模式3之抽象工廠模式

工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...

設計模式 之 抽象工廠

及我們知道,在工廠方法中,每個 creator,只是建立單一的例項,那對於一次要建立n多不同的類例項的情況呢?及,如果我們要實現這樣的方法呢?using system using system.collections.generic using system.text namespace 工廠方法 ...