用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;
}
}
}
待續......
新聞熱點
疑難解答