簡單工廠模式是由一個工廠對象決定建立出哪種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,能夠理解爲是不一樣工廠模式的一個特殊實現。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"; } } }
輸出以下:設計
類圖以下: