簡單工廠模式 - OK

  簡單工廠模式是由一個工廠對象決定建立出哪種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,能夠理解爲是不一樣工廠模式的一個特殊實現。javascript

  使用場景:html

  • 工廠類負責建立的對象比較少;
  • 客戶只知道傳入工廠類的參數,對於如何建立對象(邏輯)不關心;
  • 因爲簡單工廠很容易違反高內聚責任分配原則,所以通常只在很簡單的狀況下應用。

  優勢:java

  工廠類是整個模式的關鍵。包含了必要的邏輯判斷,根據外界給定的信息,決定究竟應該建立哪一個具體類的對象。
git

  經過簡單工廠類,對外部來講,僅僅須要知道傳入什麼參數就能返回何種對象就能夠了。沒必要再理會到對象是怎樣生成的,邏輯是如何實現等等。設計模式

  缺點:
ide

  因爲工廠類集中了全部實例的建立邏輯,違反了高內聚責任分配原則,將所有建立邏輯集中到了一個工廠類中;它所能建立的類只能是事先考慮到的,若是須要添加新的類,則就須要改變工廠類了。當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不一樣條件建立不一樣實例的需求。這種對條件的判斷和對具體產品類型的判斷交錯在一塊兒,很難避免模塊功能的蔓延,對系統的維護和擴展很是不利;post

  簡單工廠模式解決的是對象建立的問題,它的功能是根據傳入的不一樣參數,建立不一樣的對象。this

  基於簡單工廠模式的簡單示例:spa

複製代碼
namespace 簡單工廠
{
    public class Program
    {
        static void Main(string[] args)
        {
            DataBase DB = SimpleFactory.GetInstance("Oracle");
            Console.WriteLine(DB.SelectTopOne());

            DataBase DB2 = SimpleFactory.GetInstance("SQLServer");
            Console.WriteLine(DB2.SelectTopOne());

            Console.ReadKey();
        }
    }

    //簡單工廠類,判斷類,用於返回對應的的對象
    public class SimpleFactory
    {
        public static DataBase GetInstance(string type)
        {
            DataBase db = null;
            switch (type)
            {
                default:
                case "SQLServer":
                    db = new SQLServer();
                    break;
                case "Oracle":
                    db = new Oracle();
                    break;
            }
            return db;
        }
    }

    //基類
    public class DataBase
    { 
        public virtual string SelectTopOne()
        {
            return "SELECT TOP 1 * FROM Table";
        }
    }

    //實現類1
    public class SQLServer : DataBase
    {
        public override string SelectTopOne()
        {
            return "SELECT TOP 1 * FROM Table";
        }
    }

    //實現類2
    public class Oracle : DataBase
    {
        public override string SelectTopOne()
        {
            return "SELECT * FROM Table WHERE ROWRUM <= 1";
        }
    }
}
複製代碼

  輸出以下:設計

  

  類圖以下:

  

 
 
分類: 設計模式
 
1
0
 
(請您對文章作出評價)
 
« 上一篇: 單例模式 - OK
» 下一篇: 策略模式 - OK
相關文章
相關標籤/搜索