0
//抽象工廠類在抽象工廠模式中插入工廠方法的位置?
class pizzaStore
{
public:
vector <string> toppingsType;
virtual void bakePizza (){}
virtual void preparePizza ()
{
for (int i = 0; i < toppingsType.size(); i++)
{
addTopping (toppingsType[i]);
}
}
virtual void cutPizza (){}
virtual void boxPizza (){}
};
class xPizzaStore : public pizzaStore
{
xPizzaStore()
{
toppingsType = "1";
sauceType = "2";
cheesetype = "3";
}
void orderPizza()
{
bakePizza();
preparePizza();
// xPizzaStore doesn't cut the pizza.
boxPizza();
}
};
//廠用於創建存儲
pizzaStore * whichStore (string storeName)
{
pizzaStore obj = NULL;
if (storeName == "x")
{
obj = new xPizzaStore();
}
else if (storeName == "y")
{
obj = new yPizzaStore();
}
else if (storeName == "z")
{
obj = new zPizzaStore();
}
return obj;
}
//工廠方法用於創建比薩餅
方法pizzaStore * whichPizza (string pizzaName)
{
pizzaName obj = NULL;
if (pizzaBaseType == "x")
{
obj = new xPizzaName();
}
else if (pizzaBaseType == "y")
{
obj = new yPizzaName();
}
else if (pizzaBaseType == "z")
{
obj = new zPizzaName();
}
return obj;
}
可以有不同類型的商店作爲以及比薩餅。
這兩種工廠方法應包含哪些類,爲什麼? 將它們包含在pizzaStore類本身中是否有意義?
爲什麼'whichPizza'方法返回'pizzaStore *'?我猜這是一個拼寫錯誤,而且你還沒有爲不同的比薩類('xPizaName','yPizzaName','zPizzaName')顯示基類(例如'PizzaName',或者只是'Pizza')。我會把'whichPizza'作爲基類'pizzaStore'中的虛擬方法,但是仍然可以''xPizzaStore'創建'yPizzaName'和'zPizzaName'? – 2012-01-28 12:18:03
Anisha,你爲什麼需要將工廠方法插入類中?對我來說,將它們作爲免費功能看起來很不錯。 – 2012-01-28 11:28:04