1 工廠模式
1.1 模式引出
如何將實體化具體類的代碼從應用中抽離出來,或者封裝起來,使他們不會干擾應用的其他部分?
Pizza OrderPizza(string type)
{
// 根據pizza的型別,實體化正確的具體類,然后將其賦值給pizza實體變數
if (type.equals("cheese"))
{
pizza = new CheesePizza();
}
else if (type.equals("greek"))
{
pizza = new GreekPizza();
}
else if (type.equals("pepperoni"))
{
pizza = new PepperoniPizza();
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
現在最好將創建物件移到orderPizza()之外,要把創建pizza的代碼移到另一個物件中,由這個新物件專職創建pizza,這個新物件稱為
“工廠”。下面就來進行代碼實作吧!
1.2 代碼實作
class SimplePizzaFactory
{
Pizza createpizza(string type)
{
Pizza pizza = nullptr;
if (type.equals("cheese"))
{
pizza = new CheesePizza();
}
else if (type.equals("greek"))
{
pizza = new GreekPizza();
}
else if (type.equals("pepperoni"))
{
pizza = new PepperoniPizza();
}
return pizza;
}
}
這樣似乎只是把問題搬到另一個物件了,問題依然存在。SimplePizzaFactory可以有許多的客戶,雖然目前只有orderpizza是它的客
戶,可能還有pizzashopmenu,homedelivery。所以把創建披薩的代碼包裝進類后,當以后實作改變時,只需要修改這個類即可。
1.3 重做PizzaStore類
class PizzaStore
{
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory)
{
this.factory = factory;
}
public Pizza OrderPizza(string type)
{
Pizza pizza;
pizza = factory.createpizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/185065.html
標籤:模式及實現
上一篇:c語言shu'zu
