抽象工厂的作用是创建产品族。下面将各种具体的pizza进行了分类和抽象,如加州奶酪pizza和纽约奶酪pizza进行抽象,同一种pizza,不同的地方所使用的原材料是不同的。所以从pizza这个抽象类中,派生出一个奶酪pizza类。奶酪pizza类中有一个原料工厂,由这个工厂供应原材料。这样pizza和原料之间被解耦。
Pizza *concretePizzaStoreA::createPizza(int type)
{
ConcretePizzaIngredientFactoryA *ingredientFactory = new ConcretePizzaIngredientFactoryA();
if(type == PIZZA_A)
return new concretePizzaA(ingredientFactory);
else(type == PIZZA_B)
return new concretePizzaB(ingredientFactory);
else(type == PIZZA_C)
return new concretePizzaC(ingredientFactory);
}
concretePizzaA::concretePizzaA(PizzaIngredientFactory *fy)
{
this->ingredientFactory = fy;
}
void concretePizzaA::Prepare()
{
dough = ingredientFactory->createDough();
sauce = ingredientFactory->createSauce();
cheese = ingredientFactory->createCheese();
}
client:
// 1.创建一个pizza店
PizzaStore *pizzaStore = new concretePizzaStoreA();
// 2.下单
pizzaStore->orderPizza(type);
// 3. orderPizza中调用createPizza创建具体原料工厂-->根据type创建具体pizza.
// 4. 对pizza准备原料(由具体的原料工厂提供各种原材料)-->烤焙-->切块-->装箱。