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