前言:簡單工廠不能說是設計模式,它是一種變成習慣,因為它不是23種設計模式之一,但是它在實際開發中經常用到,而且也非常簡單,可以說是工廠模式的一個引導。
大多程式員都是單身狗,為了彌補一下你們的心情,我決定用你這個對象和你對象進行講解簡單工廠
IWifeAction.cs 接口類
WifeHug.cs 行為類
WifeKiss.cs 行為類
Factory.cs 工廠類
當你去找你老婆索要這些行為的時候,如果她願意,她就會開始這個行為。
IWifeAction.cs 類Code部分:
namespace MyFactory
{
/// <summary>
/// 抽象行為類:動作
/// </summary>
public interface IWifeAction
{
string GetAction();
}
}
WifeKiss.cs 類 Code部分:
public class WifeKiss : IWifeAction
{
public string GetAction()
{
return "親親";
}
}
WifeHug.cs 類 Code部分:
public class WifeHug : IWifeAction
{
public string GetAction()
{
return "抱抱";
}
}
Factory.cs 類 Code部分:
/// <summary>
/// 工廠類
/// </summary>
public class Factory
{
public IWifeAction GetWifeAction(string actionName)
{
if (actionName.Equals("親親"))
return new WifeKiss();
else if (actionName.Equals("抱抱"))
return new WifeHug();
throw new Exception("大白天的你想幹啥?");
}
}
如果她不願意的話,就抛一個異常。
用戶端 Code部分:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
IWifeAction action;
/// <summary>
/// 老公請求
/// </summary>
private void btn_Click(object sender, EventArgs e)
{
Factory factory = new Factory();
//...省略選擇。例如switch
try
{
action = factory.GetWifeAction("親親");
MessageBox.Show(action.GetAction());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
體系結構

簡單工廠的要點就是你傳什麼,它就傳回什麼。不需要找到那麼多細節。
優點:工廠類有必要的邏輯判斷,可以決定什麼時候建立一個動作類,進而用戶端不需要去建立什麼對象,隻需要消費即可。
用戶端無需去記住具體的類名,通過簡單工廠的調用可以将減少使用者記憶。
缺點:由于工廠類包含了所有動作的建立邏輯,如果不能工作,系統則直接out;
不利于系統擴充,例如我想要親親還想要看足球,則需要在if 中(switch) 添加分支.
使用工廠模式的最好場景是:對象較少,維護簡單工廠類比較友善時可考慮使用它.