工廠方法模式定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。
工廠方法讓類把例項化推遲到子類。
creator是乙個類,它實現了全部操縱產品的方法,但不實現工廠方法。
creator的全部子類都必須實現工廠方法(factorymethod()),以實際製造出產品。
全部的產品必須實現product基類。這樣一來使用這些產品的類就能夠引用這個基類,而不是派生類。
披薩店希望可以開一些加盟店。
經營者希望確保加盟店運營的質量,所以希望這些店都使用能經過實踐考研的**。問題在於每家加盟店都可能想要提供不同風味的披薩(例如說紐約。芝加哥,加州)。這收到了開店地點及該地區披薩口味的影響。
解決的方法:讓每乙個區域風味的披薩工廠繼承基類披薩工廠使披薩工廠的訂單系統不變。然後建立自己風味的披薩。這樣真正選購披薩型別,使用詳細的披薩工廠決定的。
#include #include #include using namespace std;
首先建立pizza類
class pizza
void addtops(string tops)
void prepare()
cout << endl;
} void bake()
void cut()
void box()
string getname()
private:
string name;
string dough;
string sauce;
listtoppings;
};
然後建立紐約cheese風格的pizza類和紐約clam風格的pizza類
class nystylecheesepizza : public pizza
};class nystyleclampizza : public pizza
};
建立基類工廠
class pizzastore
pizza* oderpizza(string type)
virtual pizza* createpizza(string type)
};
建立詳細類工廠(紐約pizza工廠)
class nypizzastore : public pizzastore
else if(item == "clam")
else
return null;
}};//...建立其它地區工廠...
客戶**:
int main()
執行結果:
preparingny style sauce and cheese pizza
tossingdough
addingsauce
addingtoppings
grated reggiano cheese
bakefor 25 minutes at 350
cuttingthe pizza into diagonal slices
placepizza in offical pizzastore box
ethanordered a ny style sauce and cheese pizza
請按隨意鍵繼續. . .
設計原則6:依賴倒置原則(dependency inversion priciple):要依賴抽象,不要依賴詳細類。
設計原則4:工廠方法用來處理物件的建立,並將這種行為封裝在子類中。這樣,客戶中關於基類的**和子類物件物件建立**解耦了。
參考head first設計模式
設計模式 工廠方法C 實現
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類 核心介面所在,該方法定義產品生成 virtual product factorymethod 0 virtual creator 0 class concretecreator public creator ...
C 設計模式 工廠方法模式
問題描述 之前講到了c 設計模式 簡單工廠模式,由於簡單工廠模式的侷限性,比如 工廠現在能生產producta productb和productc三種產品了,此時,需要增加生產productd產品 那麼,首先是不是需要在產品列舉型別中新增新的產品型別標識,然後,修改factory類中的switch結...
C 設計模式 工廠方法模式
問題描述 之前講到了c 設計模式 簡單工廠模式,由於簡單工廠模式的侷限性,比如 工廠現在能生產producta productb和productc三種產品了,此時,需要增加生產productd產品 那麼,首先是不是需要在產品列舉型別中新增新的產品型別標識,然後,修改factory類中的switch結...