【发布时间】:2012-01-28 11:22:22
【问题描述】:
// 抽象工厂类
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 类本身中是否有意义?
【问题讨论】:
-
Anisha,你为什么需要将工厂方法插入到一个类中?对我来说,将它们保留为免费功能似乎完全没问题。
-
为什么
whichPizza方法返回pizzaStore*?我想这是一个错字,你没有显示不同披萨类(xPizaName、yPizzaName、zPizzaName)的基类(例如PizzaName,或者只是Pizza)。我会将whichPizza作为基类pizzaStore中的虚拟方法,但仍然...可以xPizzaStore创建yPizzaName和zPizzaName?
标签: c++ oop design-patterns factory-pattern