今天看了看设计模式中的工场模式,感觉还不错,一时兴起,便将我原来利用简单工场模式写的一个操作数据库的类大至改成了工场模式,算是加深我对工场模式的理解吧。下面来看看实现过程:
一。采用工场模式实现对Connection对象的操作
using System;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace DBFactory
![]()
![]()
{
![]()
/**//// <summary>抽象Connection工場類</summary>
public abstract class ConnectionFactory
![]()
{
protected string connectionString;
public ConnectionFactory(string connString)
![]()
{
this.connectionString = connString;
}
public abstract IDbConnection GetConnection();
}
![]()
/**//// <summary>實現SqlConnection對象的具體工作類</summary>
public class SqlConnection : ConnectionFactory
![]()
{
![]()
public SqlConnection() : this(null)
{}
![]()
public SqlConnection(string connString) : base(connString)
{}
public override IDbConnection GetConnection()
![]()
{
if(connectionString!=null)
![]()
{
return new System.Data.SqlClient.SqlConnection(connectionString);
}
else
![]()
{
return new System.Data.SqlClient.SqlConnection();
}
}
}
![]()
/**//// <summary>實現OleDbConnection對象的具體工場類</summary>
public class AccessConnection :ConnectionFactory
![]()
{
![]()
public AccessConnection() : this(null)
{}
![]()
public AccessConnection(string connString) :base(connString)
{}
public override IDbConnection GetConnection()
![]()
{
if(connectionString!=null)
![]()
{
return new OleDbConnection(connectionString);
}
else
![]()
{
return new OleDbConnection();
}
}
}
}
二。采用工场模式实现对Command对象的操作
using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace DBFactory
![]()
![]()
{
![]()
/**//// <summary>抽象CommandFactory類</summary>
public abstract class CommandFactory
![]()
{
protected string commandText;
protected IDbConnection iConn;
public CommandFactory(IDbConnection conn,string commText)
![]()
{
this.iConn = conn;
this.commandText = commText;
}
public abstract IDbCommand GetCommand();
}
![]()
/**//// <summary>實現SqlCommand對象的具體類</summary>
public class SqlCommand : CommandFactory
![]()
{
![]()
public SqlCommand(IDbConnection conn,string commText) : base(conn,commText)
{}
public override IDbCommand GetCommand()
![]()
{
return new System.Data.SqlClient.SqlCommand(commandText,(System.Data.SqlClient.SqlConnection)iConn);
}
}
![]()
/**//// <summary>實現OleDbCommand對象的具體類</summary>
public class AccessCommand : CommandFactory
![]()
{
![]()
public AccessCommand(IDbConnection conn,string commText) : base(conn,commText)
{}
public override IDbCommand GetCommand()
![]()
{
return new OleDbCommand(commandText,(OleDbConnection)iConn);
}
}
}
三。采用工场模式实现对DataAdapter对象的操作
四。这里利用简单工场模式来返回以上的抽象工场对象
五。封装的操作数据库存的类
上面對具體的數據庫的選擇采用的是簡單工場模式來實現的(因工場模式中的具體類只能實現具體的對象,感覺不好實現)
實現方法:
