一、描述
這個不算23種設計模式裏面的,只是後面會講工廠模式,所以拿出來講下。由一個工廠管理類來控制需要生產什麼產品,提供一個生產的方法給客戶端使用,客戶端根據參數調用來獲得不同的產品。工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。
二、優劣勢
優點:用戶在使用時可以直接根據工廠類去創建所需的實例,而無需瞭解這些對象是如何創建以及如何組織的。有利於整個軟件 體系結構的優化。
缺點:一旦這個工廠類出現問題,整個客戶端就蹦了,畢竟所有地方生產都由它實現。也不容易擴展,每次新曾產品時都得修改 生產產品的判斷條件。
三、需求
生產鼠標,有2個品牌,惠普和戴爾。
四、不使用設計模式
都不考慮設計了,直接擼代碼。
3個類,
MouseBase.cs -鼠標基類
HpMouse.cs --惠普鼠標類
DellMouse.cs -戴爾鼠標類
//鼠標基類
public abstract class MouseBase
{
public abstract void Show();
}
//惠普鼠標
public class HpMouse : MouseBase
{
public override void Show()
{
Debug.Log("惠普鼠標老品牌值得信賴!");
}
}
//戴爾鼠標
public class DellMouse : MouseBase
{
public override void Show()
{
Debug.Log("戴爾鼠標帶給你不一樣的驚喜!");
}
}
//客戶端調用
public static void main(string[] args)
{
MouseBase mouse1 = new HpMouse();
mouse1.Show();
MouseBase mouse2 = new DellMouse();
mouse2.Show();
}
運行結果
小結:這樣一看好像是沒什麼問題,需要什麼牌子的鼠標就new對應的類就好了,但是要考慮一點,一般軟件或者遊戲裏生成鼠標對象可不只是一個地方,可能達到幾十處,當你要查看具體哪些地方生成過就會顯得特別的麻煩,怎麼解決呢,我們往下看。
五、使用設計模式
通過添加工廠類,生成產品的工作交給它來負責。
3個類,
MouseBase.cs -鼠標基類
HpMouse.cs --惠普鼠標類
DellMouse.cs -戴爾鼠標類
FactoryManager.cs -工廠類
//鼠標基類
public abstract class MouseBase
{
public abstract void Show();
}
//惠普鼠標
public class HpMouse : MouseBase
{
public override void Show()
{
Debug.Log("惠普鼠標老品牌值得信賴!");
}
}
//戴爾鼠標
public class DellMouse : MouseBase
{
public override void Show()
{
Debug.Log("戴爾鼠標帶給你不一樣的驚喜!");
}
}
//工廠,控制生產什麼鼠標
public class FactoryManager
{
//單例模式
private static FactoryManager _instance;
public static FactoryManager Instance
{
get {
if (_instance==null)
{
_instance = new FactoryManager();
}
return _instance;
}
}
//創建一個鼠標,根據品牌名稱
public MouseBase CreateMouse(string str)
{
MouseBase mouse = null;
switch (str)
{
case "惠普":
mouse = new HpMouse();
break;
case "戴爾":
mouse = new DellMouse();
break; ;
}
return mouse;
}
}
//客戶端調用
public static void main(string[] args)
{
MouseBase mouse1 = FactoryManager.Instance.CreateMouse("惠普");
mouse1.Show();
MouseBase mouse2 = FactoryManager.Instance.CreateMouse("戴爾");
mouse2.Show();
}
運行結果
小結:我們把生成鼠標的方式抽象出來,做一個工廠,然後客戶端每次要生成鼠標的時候只需要調用這個類,再根據參數來生成對應的鼠標就可以了,要看哪個地方有生成鼠標,只需要查看這個類在哪被引用就行。
六、設計圖
通過學習,我們瞭解到了簡單工廠模式的應用,我們把剛剛的實現方式畫出來。
七、進階講解
這是最基本的簡單工廠,進階一點的是工廠模式,抽象工廠模式,詳情看另外的篇章。
八、總結
什麼時候用簡單工廠呢,因爲每次添加產品都必須修改工廠類裏的判斷條件,所以當產品類型比較固定不太會變化的時候適合用 ,比如生成男人和或者女人,總不會再給你提好幾個另類的東東了吧。
覺得有用就留下評論吧^-^