2012-01-28 82 views
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類本身中是否有意義?

+0

爲什麼'whichPizza'方法返回'pizzaStore *'?我猜這是一個拼寫錯誤,而且你還沒有爲不同的比薩類('xPizaName','yPizzaName','zPizzaName')顯示基類(例如'PizzaName',或者只是'Pizza')。我會把'whichPizza'作爲基類'pizzaStore'中的虛擬方法,但是仍然可以''xPizzaStore'創建'yPizzaName'和'zPizzaName'? – 2012-01-28 12:18:03

+0

Anisha,你爲什麼需要將工廠方法插入類中?對我來說,將它們作爲免費功能看起來很不錯。 – 2012-01-28 11:28:04

回答

0

將它們包含在pizzaStore類本身中是否有意義?

,它應該是完全沒有把這些方法class pizzaStorestatic方法。一般來說,我認爲,根據其return類型將這種工廠方法放入class,並且pizzaStore是一個很好的選擇。