前言:简单工厂不能说是设计模式,它是一种变成习惯,因为它不是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) 添加分支.
使用工厂模式的最好场景是:对象较少,维护简单工厂类比较方便时可考虑使用它.