软件设计模式之简单工厂模式

简单工厂模式的概念:

简单工厂模式是属于创建型模式,又叫做静态工厂方法(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>

  

希望看到的大佬能指点下,感激不尽;

posted @ 2020-10-20 17:40  壹-ZL  阅读(271)  评论(0编辑  收藏  举报