在軟體開發中,當我們會用到大量的建立某種物件時,就會使用工廠模式。
我們現在提出乙個需求,乙個披薩店,分為希臘披薩和乳酪披薩,完成訂購披薩的功能。
傳統解決方案:
僅展示orderpizza**:
如上述**就暴露了傳統模式的缺陷,當有大量物件的時候,並且建立pizza的物件好多功能都需要用到(此題功能較少,意思就是如果有多個orderpizza),導致每建立乙個類似pizza物件,就需要修改大量的**。
所以針對上述問題我們先提出了:
優化方案:
首先建立乙個工廠類(注意有兩種方式,靜態和非靜態都可以):
//簡單工廠類
public class ******factory else if (ordertype.equals("cheese")) else if (ordertype.equals("pepper"))
return pizza; }
//簡單工廠模式 也叫 靜態工廠模式
public static pizza createpizza2(string ordertype) else if (ordertype.equals("cheese")) else if (ordertype.equals("pepper"))
return pizza;
}}
將工廠類聚合在我們建立訂單裡面。
public class orderpizza
public void setfactory(******factory ******factory) else
}while(true); }
// 寫乙個方法,可以獲取客戶希望訂購的披薩種類
private string gettype() catch (ioexception e)
}}
這樣我們就實現了建立**與訂單**的解耦,不會出現大量物件造成的問題。
工廠方法模式和簡單工廠解決的問題都是在建立大量物件時的問題,不過相比較於簡單工廠,工廠方法是乙個介面/抽象類,相比要簡單工廠的聚合方式擴充套件性更高一些。
比如提出下述場景下,工廠方法就相較於簡單工廠更合適。
這樣的訂購如果用簡單工廠,針對不同地區建立不同的工廠類,可以是可以但是相比較這個工廠方法模式,可擴充套件性就很低。(個人認為就是體現在下述**的pizza製作的公共**,如果使用工廠類就會造成大量冗餘)
以下述部分**為例:
public abstract class orderpizza while (true); }
// 寫乙個方法,可以獲取客戶希望訂購的披薩種類
private string gettype() catch (ioexception e)
}}
public class ldorderpizza extends orderpizza else if (ordertype.equals("pepper"))
// todo auto-generated method stub
return pizza;
}}
使用:
public class pizzastore else
// todo auto-generated method stub
}}
上面提到了簡單工廠的乙個擴充套件性方面的缺陷,而抽象工廠就解決了這個弊端,它相當於是簡單工廠的公升級版,也可以說是簡單工廠和工廠方法的合併版
仍是上述問題,解決方案:
//乙個抽象工廠模式的抽象層(介面)
public inte***ce absfactory
//這是工廠子類
public class bjfactory implements absfactory else if (ordertype.equals("pepper"))
return pizza;
}}
public class ldfactory implements absfactory else if (ordertype.equals("pepper"))
return pizza;
}}
public class orderpizza
private void setfactory(absfactory factory) else
} while (true);
} // 寫乙個方法,可以獲取客戶希望訂購的披薩種類
private string gettype() catch (ioexception e)
}}
具體使用:
public class pizzastore
}
設計模式之建立型模式 工廠模式
工廠模式 factory pattern 主要用於選擇,根據客戶不同的要求,使用同乙個介面實現不同的功能,然後使用工廠類來判斷使用哪個例項介面,工廠模式是乙個最佳的建立物件的模式。工廠模式的優點 1 在呼叫者只需要知道需要建立的名稱就能夠建立乙個物件,而不用知道產品功能的具體實現,簡化了呼叫者的工作...
Python設計模式 建立型模式 工廠方法模式
描述 coding utf 8 class product def operation self pass class concrete product1 product def operation self return the result of concreteproduct1 class c...
設計模式 建立型模式之抽象工廠模式
抽象工廠模式是工廠模式中最抽象的乙個工廠模式,引入的產品組的概念,對它的定義就是將一組相關或相互依賴的物件提供介面,而不需要具體的物件,這個定義是很抽象的。抽象工廠模式包括的角色 1.抽象工廠類 宣告一組用於建立一種產品的的方法 2.具體工廠類 繼承了抽象工廠類,建立一組具體產品的物件 3.抽象產品...