用C#實(shí)現(xiàn)的數(shù)據(jù)庫抽象工廠(一)
最近學(xué)習(xí)了一下設(shè)計(jì)模式,便嘗試用C#對(duì)數(shù)據(jù)庫的訪問操作采用抽象工廠的模式實(shí)現(xiàn)一下,其中與標(biāo)準(zhǔn)的模式略有不同,加入了一些自己的想法,希望大家批評(píng)指正,代碼共分為6個(gè)類:
(1)AbstractDbFactory.cs
using System; using System.Data;
namespace DbService { /// <summary> /// 數(shù)據(jù)庫抽象工廠接口 /// </summary> public interface AbstractDbFactory { /// <summary> /// 建立默認(rèn)連接 /// </summary> /// <returns>數(shù)據(jù)庫連接</returns> IDbConnection CreateConnection();
/// <summary> /// 根據(jù)連接字符串建立Connection對(duì)象 /// </summary> /// <param name="strConn">連接字符串</param> /// <returns>Connection對(duì)象</returns> IDbConnection CreateConnection(string strConn);
/// <summary> /// 建立Command對(duì)象 /// </summary> /// <returns>Command對(duì)象</returns> IDbCommand CreateCommand();
/// <summary> /// 建立DataAdapter對(duì)象 /// </summary> /// <returns>DataAdapter對(duì)象</returns> IDbDataAdapter CreateDataAdapter();
/// <summary> /// 根據(jù)Connection建立Transaction /// </summary> /// <param name="myDbConnection">Connection對(duì)象</param> /// <returns>Transaction對(duì)象</returns> IDbTransaction CreateTransaction(IDbConnection myDbConnection);
/// <summary> /// 根據(jù)Command建立DataReader /// </summary> /// <param name="myDbCommand">Command對(duì)象</param> /// <returns>DataReader對(duì)象</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類構(gòu)造函數(shù) /// </summary> private Factory() { }
/// <summary> /// 獲得Factory類的實(shí)例 /// </summary> /// <returns>Factory類實(shí)例</returns> public static Factory GetInstance() { if(singleFactory == null) { lock(syncObj) { if(singleFactory == null) { singleFactory = new Factory(); } } } return singleFactory; }
/// <summary> /// 建立Factory類實(shí)例 /// </summary> /// <returns>Factory類實(shí)例</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; } } }
待續(xù)......
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!