1. 程式人生 > 實用技巧 >軟體設計模式之簡單工廠模式

軟體設計模式之簡單工廠模式

簡單工廠模式的概念:

簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現。

簡單工廠模式優缺點:

簡單工廠的優點我百度了很多,眾說紛紜;就連簡單工廠的實現都有很多不同的;

如:

1、計算器做例子,工廠裡面根據傳入的引數來進行加減乘除的,但是我直接一個類裡寫加減乘除打上文件註釋,不是更方便?我類打個點不就出來了?描述還可以要多詳細可以多詳細;

2、是一個介面,有很多實現類,然後工廠類統一對實現類管理,這個我覺得作用就是解耦;原本是客戶端<-->實現類,變成了客戶端<-->工廠類<-->實現類;這個我還是有點點懵;

3、是說賣滑鼠的,全域性配置去控制,第一天賣滑鼠a,然後第二天滑鼠a賣完了,要賣滑鼠b,就不需要改程式碼,只需要改配置,所有的使用到的類就全改成了滑鼠b了;這個例子的好處我能理解,就是可以全域性把控,讓所有用到我工廠類的人跟著我工廠類走;

實現:

第一個例子不做實現了,沒大理解,第二個例子有點懵懵的,但似懂非懂;就實現下二,三;

第二個例子實現:

首先介面:

    public interface Mouse
    {
        string GetMouseName();
    }

然後實現類:

    public class MouseDEY:Mouse
    {
        
public string GetMouseName() { return "達爾優"; } } public class MouseSFY:Mouse { public string GetMouseName() { return "雙飛燕"; } }

然後弄個列舉(我在這的想法是想讓它類似於路由的作用,以後實現類多了只需要看這個列舉就知道自己需要哪個;不知道是不是多此一舉,反正我覺得傳引數傳列舉也好看點,以後看到不足了再改了):

    public enum MouseType
    {
        達爾優,
        雙飛燕
    }  

然後是簡單工廠類:

    public class MouseFactory
    {
        private static Mouse mouse = null;
        public static Mouse createMouse(MouseType type)
        {
            switch (type)
            {
                case MouseType.雙飛燕:
                    mouse = new MouseSFY();
                    break;
                case MouseType.達爾優:
                    mouse = new MouseDEY();
                    break;
            }
            return mouse;
        }
    }

第三個例子實現:

第三個例子跟第二個其實差別不大,唯一的區別就是一個引數時呼叫工廠方法時傳進來的;一個引數時寫在全域性配置裡的;

簡單工廠類:

    public class MouseFactory
    {
        private static Mouse mouse = null;
        private static string type =System.Configuration.ConfigurationManager.AppSettings["Fication"].ToString();
        public static Mouse createMouse()
        {
            switch (type)
            {
                case "雙飛燕":
                    mouse = new MouseSFY();
                    break;
                case "達爾優":
                    mouse = new MouseDEY();
                    break;
            }
            return mouse;
        }
    }

全域性配置:

  <appSettings>
    <add key="Fication" value="達爾優"/>
  </appSettings>

  

希望看到的大佬能指點下,感激不盡;