天天看點

今天俺要說一說簡單工廠模式(Simple Factory)

前言:簡單工廠不能說是設計模式,它是一種變成習慣,因為它不是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);
            }
        }
    }      

體系結構

今天俺要說一說簡單工廠模式(Simple Factory)

簡單工廠的要點就是你傳什麼,它就傳回什麼。不需要找到那麼多細節。

優點:工廠類有必要的邏輯判斷,可以決定什麼時候建立一個動作類,進而用戶端不需要去建立什麼對象,隻需要消費即可。

      用戶端無需去記住具體的類名,通過簡單工廠的調用可以将減少使用者記憶。

缺點:由于工廠類包含了所有動作的建立邏輯,如果不能工作,系統則直接out;

   不利于系統擴充,例如我想要親親還想要看足球,則需要在if 中(switch) 添加分支.

使用工廠模式的最好場景是:對象較少,維護簡單工廠類比較友善時可考慮使用它.