深刻學習《大話設計模式》 簡單工廠模式

簡單工廠模式

定義:封裝改變,既然要封裝改變,天然也就要找到須要更改的代碼,而後將須要更改的代碼用類來封裝,這樣的思路就是咱們簡單工廠模式的實現方式了html

下面咱們經過一則小故事來簡述一下咱們在項目中爲何要使用簡單工廠模式mysql

背景

橙子同窗正在興高采烈的逛着博客園,學習着大佬的一些操做,忽然發現微信閃動了一下。點開一看,然來是萬惡的產品經理給橙子同窗發來一條消息,說有個新的需求須要橙子同窗來實現一些,巴拉巴拉一大堆,在最後和橙子同窗說因爲最近經濟不景氣,公司要節約開支,因此在數據庫方面咱們就選用mysql數據庫吧。(ps:橙子同窗心想:摳門的公司,在項目開發上都不捨得花錢,怪不得這個月的水果日沒了),橙子同窗微笑着對產品經理說,好的,聽從公司的安排。就進入了項目開發。
熬到次日早上九點。雙眼失神的對產品經理說。產品完成了,數據庫也是使用的mysql數據庫,我先回去休息了,產經理品先瀏覽了一遍產品功能,就說,橙子同窗仍是厲害了,不過數據庫方面可能須要稍微改一下,因爲第三方要求咱們使用sqlserver數據庫。橙子同窗愣了一會(心裏ps:唉,果真是萬惡的產品經理),也沒有和產品經理爭論,畢竟程序員的高傲仍是要有的。因而橙子同窗開啓了第二次的編碼過程git

代碼示例程序員

調用方github

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();
        }
    }

建立數據庫工廠,用來返回數據庫實例sql

/// <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數據庫鏈接ide

/// <summary>
    /// SqlServer數據庫鏈接
    /// </summary>
     public class SqlServerConnetion : ConnetionAbstract
    {
        public override string DBConnection()
        {
            return "我是SqlServer鏈接";
        }
    }

數據庫對應枚舉sqlserver

/// <summary>
    /// 數據庫鏈接枚舉
    /// </summary>
    public enum DBConnetionEnum
    {
        /// <summary>
        /// mysql
        /// </summary>
        Mysql = 0,

        /// <summary>
        /// sqlserver
        /// </summary>
        SqlServer = 1,

    }

以上就是橙子同窗最後編寫的代碼。最後無論第三方要求用什麼數據庫,橙子同窗只須要在調用的地方進行修改就能夠。

最後總結一下使用簡單工廠的優勢,缺點和使用場景

簡單工廠模式優勢

  • 簡單工廠模式解決了客戶端直接依賴於具體對象的問題,客戶端能夠消除直接建立對象的責任,而僅僅是使用。簡單工廠模式實現了對責任的分割

  • 簡單工廠也起到了代碼複用的做用,消費者只須要調用工廠就能夠,而不須要直接去參與建立對象

簡單工廠模式缺點

  • 工廠類集中了全部產品建立邏輯,一旦不能正常工做,整個系統都會受到影響

  • 系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,會形成工廠邏輯複雜

適用場景

  • 當工廠類負責建立的對象比較少時能夠考慮使用簡單工廠模式

  • 客戶若是隻知道建立工廠類的參數,對於如何建立對象的邏輯不關心是能夠考慮使用簡單工廠模式

以上就上橙子同窗和產品經理的第一則小故事啦,讓咱們一塊兒期待橙子同窗和產品經理的第二則小故事吧
源碼github地址:https://github.com/1301536601/DesignMode.git 若有哪裏講得不是很明白或是有錯誤,歡迎指正 如您喜歡的話不妨點個贊收藏一下吧

相關文章
相關標籤/搜索