zoukankan      html  css  js  c++  java
  • 软件设计模式之简单工厂模式

    简单工厂模式的概念:

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

      

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

  • 相关阅读:
    服务器使用ssh秘钥登录并禁止密码登录
    c# @符号后面对双引号(")转义
    unity EditorWindow拖入文件或文件夹
    unity 生成GUID
    unity 将对象始终放在鼠标位置和指定的相机z轴位置
    unity 打开指定路径文件夹
    unity UTF8格式加载和保存xml
    VsCode 手动配置omnisharp、.NET Core Debugger、razor
    Maya 保存场景时UV和UV集丢失
    进程通信机制
  • 原文地址:https://www.cnblogs.com/zhoulei0517/p/13847869.html
Copyright © 2011-2022 走看看