用C#实现的数据库抽象工厂(一)

原创 2004年04月08日 18:53:00

用C#实现的数据库抽象工厂(一)

     最近学习了一下设计模式,便尝试用C#对数据库的访问操作采用抽象工厂的模式实现一下,其中与标准的模式略有不同,加入了一些自己的想法,希望大家批评指正,代码共分为6个类:

(1)AbstractDbFactory.cs

using System;
using System.Data;

namespace DbService
{
 /// <summary>
 /// 数据库抽象工厂接口
 /// </summary>
 public interface AbstractDbFactory
 {
  /// <summary>
  /// 建立默认连接
  /// </summary>
  /// <returns>数据库连接</returns>
  IDbConnection CreateConnection();

  /// <summary>
  /// 根据连接字符串建立Connection对象
  /// </summary>
  /// <param name="strConn">连接字符串</param>
  /// <returns>Connection对象</returns>
  IDbConnection CreateConnection(string strConn);

  /// <summary>
  /// 建立Command对象
  /// </summary>
  /// <returns>Command对象</returns>
  IDbCommand CreateCommand();

  /// <summary>
  /// 建立DataAdapter对象
  /// </summary>
  /// <returns>DataAdapter对象</returns>
  IDbDataAdapter CreateDataAdapter();

  /// <summary>
  /// 根据Connection建立Transaction
  /// </summary>
  /// <param name="myDbConnection">Connection对象</param>
  /// <returns>Transaction对象</returns>
  IDbTransaction CreateTransaction(IDbConnection myDbConnection);

  /// <summary>
  /// 根据Command建立DataReader
  /// </summary>
  /// <param name="myDbCommand">Command对象</param>
  /// <returns>DataReader对象</returns>
  IDataReader CreateDataReader(IDbCommand myDbCommand);

  /// <summary>
  /// 获得连接字符串
  /// </summary>
  /// <returns>连接字符串</returns>
  string GetConnectionString();
 }
}

(2)Factory.cs

using System;
using System.Configuration;

namespace DbService
{
 /// <summary>
 /// Factory类
 /// </summary>
 public sealed class Factory
 {
  private static volatile Factory singleFactory = null;
  private static object syncObj = new object();
  /// <summary>
  /// Factory类构造函数
  /// </summary>
  private Factory()
  {
  }

  /// <summary>
  /// 获得Factory类的实例
  /// </summary>
  /// <returns>Factory类实例</returns>
  public static Factory GetInstance()
  {
   if(singleFactory == null)
   {
    lock(syncObj)
    {
     if(singleFactory == null)
     {
      singleFactory = new Factory();
     }
    }
   }
   return singleFactory;
  }

  /// <summary>
  /// 建立Factory类实例
  /// </summary>
  /// <returns>Factory类实例</returns>
  public AbstractDbFactory CreateInstance()
  {
   AbstractDbFactory abstractDbFactory = null;
   switch(ConfigurationSettings.AppSettings["DatabaseType"].ToLower())
   {
    case "sqlserver":
    {
     abstractDbFactory = new SqlFactory();
     break;
    }
    case "oledb":
    {
     abstractDbFactory = new OleDbFactory();
     break;
    }
    case "odbc":
    {
     abstractDbFactory = new OdbcFactory();
     break;
    }
   }   
   return abstractDbFactory;
  }
 }
}

待续......

用C#实现的数据库抽象工厂(一)

用C#实现的数据库抽象工厂(一)     最近学习了一下设计模式,便尝试用C#对数据库的访问操作采用抽象工厂的模式实现一下,其中与标准的模式略有不同,加入了一些自己的想法,希望大家批评指正,代码共分为...
  • fenghao_5555
  • fenghao_5555
  • 2007年03月20日 19:38
  • 406

设计模式学习之抽象工厂模式(实现数据访问层)

1 什么是抽象工厂模式 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们的具体类。结构图如下:   分析一下抽象工厂模式,1提供一系列...
  • wziyx513225244
  • wziyx513225244
  • 2011年08月03日 09:56
  • 3123

C#反射和抽象工厂的结合

读了这篇文章对C#的反射机制和抽象工厂的概念有了一些了解,本人认为是一篇好文章。以下文字转载自:http://blog.csdn.net/zhlyyea/archive/2008/02/23/2114...
  • hejialin666
  • hejialin666
  • 2010年04月26日 16:59
  • 1993

抽象工厂+反射+配置文件 实现数据访问程序

《大话设计模式》中第15章中《就不能不换DB吗?》引出了我今天要谈论的主题:抽象工厂+反射+配置文件 实现数据访问程序。当时也不甚理解啊!到了机房收费的亲身实践中,终于体会到了这对组合的奥秘。 抽...
  • haovip123
  • haovip123
  • 2014年08月22日 19:25
  • 3463

利用抽象工厂模式连接不同的数据库

预备知识: DAO: Data Access Object.                a Data Access Object provides the operations to create...
  • qqhw123
  • qqhw123
  • 2011年08月07日 13:08
  • 3064

用C#实现的数据库抽象工厂(二)

 以下3个类分别是Factory针对SqlServer专用连接、OleDb连接和Odbc连接时的具体实现:(3)SqlFactory.csusing System;using System.Data;...
  • fenghao_5555
  • fenghao_5555
  • 2007年03月20日 19:46
  • 342

用C#实现的数据库抽象工厂(三)

以下是在应用时真正要调用到的类:(6)DbAccess.csusing System;using System.Data;namespace DbService{ ///  /// DbAccess类...
  • fenghao_5555
  • fenghao_5555
  • 2007年03月20日 19:50
  • 388

C#设计模式02-抽象工厂模式(附源码)

抽象工厂模式是所有工厂模式中最为抽象的模式,是抽象程度最高的模式,也是最难理解的一种工厂模式。         现在举一个生活中的案例来说明抽象工厂模式,电视是我们生活中必不可说的电器,但是电视有很多...
  • bhdxmaomi
  • bhdxmaomi
  • 2016年01月12日 15:07
  • 1149

简单工厂、工厂方法与抽象工厂大比拼

简单工厂、工厂方法和抽象工厂都属于设计模式创建型,严格意义上简单工厂不属于23设计模式之一(违背了开闭原则),本文为了完整描述三工厂演变过程,对三工厂进行了整体的总结和学习,并通过三者之间的特点比较总...
  • u010097777
  • u010097777
  • 2015年08月20日 18:37
  • 1473

抽象工厂模式:实现ASP.NET访问不同数据库

在ASP.NET网站开发中可能会遇到要更换数据库,如将Aceess换为SQL Server ,由于Aceess引用System.Data.OleDb命名空间,SQL Server引用Syste...
  • judyge
  • judyge
  • 2015年05月07日 08:43
  • 372
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C#实现的数据库抽象工厂(一)
举报原因:
原因补充:

(最多只允许输入30个字)