zoukankan      html  css  js  c++  java
  • 简单工厂模式(Simple Factory)

    做小型企业软件开发,有时一个系统要与多个数据库进行交互,有时数据库还不同,有的数据存放在SQL Server中,有的存放在Oracle中,这样在写代码时,还要注意到底连接的是什么数据库,连接SQL Server时要用SqlConnection,连接Oracle时要用OracleConnection,这样给开发带来不方便,虽然目前已经有许多成熟的开发框架(Castle, Spring.NET等),但是大多数人都不怎么会使用(例如包括我自己),而且框架中许多功能对小型企业软件来讲也没有用。针对这种情况,开发小型企业软件系统时,我们可以用简单工厂模式来写一个同一的获取数据库连接的工厂类,只需要传递一个连接数据对象给工厂类的创建连接方法即可以获取你要的连接。下面看代码:

    (1)连接信息类,用于存储数据库连接信息,这些信息可以从配置文件中读取,或者XML文件,然后存在一个集合对象中,如HashTable。

    public class ConnInfo
    {
        private string _name;
        private string _type;
        private string _connString;
    
        /// <summary>
        /// 连接名称
        /// </summary>
        public string Name
        {
            get { return _name; }
        }
    
        /// <summary>
        /// 连接类型
        /// </summary>
        public string Type
        {
            get { return _type; }
        }
    
        /// <summary>
        /// 连接字符串
        /// </summary>
        public string ConnString
        {
            get { return _connString; }
        }
    
        public ConnInfo(string name, string type, string connString)
        {
            _name = name;
            _type = type;
            _connString = connString;
        }
    }
    

    (2)连接简单工厂类,用于创建连接对象。

    public class ConnFactory
    {
        public ConnFactory()
        {
        }
    
        public static IDbConnection Create(ConnInfo ci)
        {
            IDbConnection con = null;
    
            switch (ci.Type)
            {
                case "Odbc":
                    con = new OdbcConnection(ci.ConnString);
                    break;
                case "OleDb":
                    con = new OleDbConnection(ci.ConnString);
                    break;
                case "SqlServer":
                    con = new SqlConnection(ci.ConnString);
                    break;
                case "Oracle":
                    con = new OracleConnection(ci.ConnString);
                    break;
            }
    
            return con;
        }
    }
    

    这里是返回实现IDbConnection这个接口的类别的实例,因为所有DbConnection都实现了这个接口,所以在开发的时候,我们只需要使用这个接口就可以了,例如:IDbConnection con = ConnFactory.Create(connInfo); 这样就可以根据connInfo的数据库类型得到上面简单工厂创建的一个连接。而不需要根据数据库不同这样写,SqlConnection con = new SqlConnection(connString);

        这个简单工厂模式有它的优点,但是也有它的缺点,缺点就是,一旦有新的数据库类型,那么就要修改这个工厂类,也就是要加一个case语句,这样一来,如果代码是编译成了一个dll文件,那么你需要再次编译这段代码,工程大的话,编译起来很慢,很费时,不方便;二来,如果case语句很多也不好,我不清楚有没有代码质量问题,但总感觉太多不好看。

  • 相关阅读:
    初赛Part2
    数据结构
    ES 匹配条件后分组聚合
    SpringBoot starter 懒人包介绍
    HTTP1.1中容易忽视的知识点
    ​netcore 中间件浅析
    spring boot请求参数验证
    spring boot中统一对响应做处理
    并发请求工具
    抓apk中的https包(​含破解https的SSL Pinning)
  • 原文地址:https://www.cnblogs.com/known/p/1254257.html
Copyright © 2011-2022 走看看