簡單工廠模式 定義:封裝改變,既然要封裝改變,自然也就要找到需要更改的代碼,然後將需要更改的代碼用類來封裝,這樣的思路就是我們簡單工廠模式的實現方式了 下麵我們通過一則小故事來簡述一下我們在項目中為什麼要使用簡單工廠模式 背景 橙子同學正在興高采烈的逛著博客園,學習著大佬的一些操作,突然發現微信閃動 ...
簡單工廠模式
定義:封裝改變,既然要封裝改變,自然也就要找到需要更改的代碼,然後將需要更改的代碼用類來封裝,這樣的思路就是我們簡單工廠模式的實現方式了
下麵我們通過一則小故事來簡述一下我們在項目中為什麼要使用簡單工廠模式
背景
橙子同學正在興高采烈的逛著博客園,學習著大佬的一些操作,突然發現微信閃動了一下。點開一看,然來是萬惡的產品經理給橙子同學發來一條消息,說有個新的需求需要橙子同學來實現一些,巴拉巴拉一大堆,在最後和橙子同學說由於最近經濟不景氣,公司要節約開支,所以在資料庫方面我們就選用mysql資料庫吧。(ps:橙子同學心想:摳門的公司,在項目開發上都不捨得花錢,怪不得這個月的水果日沒了),橙子同學微笑著對產品經理說,好的,遵從公司的安排。就進入了項目開發。
熬到第二天早上九點。雙眼失神的對產品經理說。產品完成了,資料庫也是使用的mysql資料庫,我先回去休息了,產經理品先瀏覽了一遍產品功能,就說,橙子同學還是厲害了,不過資料庫方面可能需要稍微改一下,由於第三方要求我們使用sqlserver資料庫。橙子同學愣了一會(內心ps:唉,果然是萬惡的產品經理),也沒有和產品經理爭論,畢竟程式員的高傲還是要有的。於是橙子同學開啟了第二次的編碼過程
代碼示例
調用方
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*******mysql連接");
var mysqlSimpleFactory = DBFactory.CreateConnetion(DBConnetionEnum.Mysql);
var mysqlConnection = mysqlSimpleFactory.DBConnection();
Console.WriteLine(mysqlConnection);
Console.WriteLine("*******sqlserver連接");
var sqlServerSimpleFactory = DBFactory.CreateConnetion(DBConnetionEnum.SqlServer);
var sqlserverConnection = sqlServerSimpleFactory.DBConnection();
Console.WriteLine(sqlserverConnection);
Console.ReadKey();
}
}
創建資料庫工廠,用來返回資料庫實例
/// <summary>
/// 資料庫工廠
/// </summary>
public class DBFactory
{
public static ConnetionAbstract CreateConnetion(DBConnetionEnum dBConnetionEnum)
{
ConnetionAbstract connetion = null;
connetion = dBConnetionEnum switch
{
DBConnetionEnum.Mysql => new MysqlConnetion(),
DBConnetionEnum.SqlServer => new SqlServerConnetion(),
_ => throw new Exception("資料庫類型錯誤"),
};
return connetion;
}
}
定義連接抽象類
/// <summary>
/// 連接抽象類
/// </summary>
public abstract class ConnetionAbstract
{
/// <summary>
/// 資料庫連接
/// </summary>
/// <returns></returns>
public abstract string DBConnection();
}
實現mysql資料庫連接
/// <summary>
/// Mysql資料庫連接
/// </summary>
public class MysqlConnetion : ConnetionAbstract
{
public override string DBConnection()
{
return "我是Mysql連接";
}
}
實現sqlserver資料庫連接
/// <summary>
/// SqlServer資料庫連接
/// </summary>
public class SqlServerConnetion : ConnetionAbstract
{
public override string DBConnection()
{
return "我是SqlServer連接";
}
}
資料庫對應枚舉
/// <summary>
/// 資料庫連接枚舉
/// </summary>
public enum DBConnetionEnum
{
/// <summary>
/// mysql
/// </summary>
Mysql = 0,
/// <summary>
/// sqlserver
/// </summary>
SqlServer = 1,
}
以上就是橙子同學最後編寫的代碼。最後不管第三方要求用什麼資料庫,橙子同學只需要在調用的地方進行修改就可以。
最後總結一下使用簡單工廠的優點,缺點和使用場景
簡單工廠模式優點
簡單工廠模式解決了客戶端直接依賴於具體對象的問題,客戶端可以消除直接創建對象的責任,而僅僅是使用。簡單工廠模式實現了對責任的分割
簡單工廠也起到了代碼復用的作用,消費者只需要調用工廠就可以,而不需要直接去參與創建對象
簡單工廠模式缺點
工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都會受到影響
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,會造成工廠邏輯複雜
適用場景
當工廠類負責創建的對象比較少時可以考慮使用簡單工廠模式
客戶如果只知道創建工廠類的參數,對於如何創建對象的邏輯不關心是可以考慮使用簡單工廠模式
以上就上橙子同學和產品經理的第一則小故事啦,讓我們一起期待橙子同學和產品經理的第二則小故事吧
源碼github地址:https://github.com/1301536601/DesignMode.git
如有哪裡講得不是很明白或是有錯誤,歡迎指正
如您喜歡的話不妨點個贊收藏一下吧