再谈Abstract Factory模式来实现数据库操作的类
来源:互联网 发布:js代码在body之后运行 编辑:程序博客网 时间:2024/04/28 01:27
在前面(http://www.cnblogs.com/helimin19/archive/2005/02/26/109535.html)我讲了关于利用Factory Method来实现数据库操作的类,因为在里面控制数据库类型时采用了简单工场模式,所以感觉不好,今天再看了抽象工场模式后,认为采用抽象工场模式比采用工场模式来实现数据库操作会更好些。下面让我平来看看采用抽象工场模式是如何实现的吧。
一。簡單的類圖
二。抽象工場文件
三。抽象產品文件
以上就實現了一個簡單的采用抽象工場模式來實現數據庫操作的類,下面看看我們是如何調用的:
抽象工场模式:是比工厂方法模式更加抽象的概念,如一个生成眼镜的工厂它相对于眼镜的品牌来讲就是一个抽象工场的模式。
一。簡單的類圖
二。抽象工場文件
using System;
namespace DBFactory.AbstractFactory
{
/**//// <summary>抽象工場角色類</summary>
public abstract class DBTypeFactory
{
public DBTypeFactory(){}
public abstract DBFactory GetDB();
}
/**//// <summary>具體工場角色類</summary>
public class SqlDataBase : DBTypeFactory
{
public SqlDataBase(){}
public override DBFactory GetDB()
{
return new SqlFactory();
}
}
/**//// <summary>具體工場角色類</summary>
public class AccessDataBase : DBTypeFactory
{
public AccessDataBase(){}
public override DBFactory GetDB()
{
return new AccessFactory();
}
}
}
namespace DBFactory.AbstractFactory
{
/**//// <summary>抽象工場角色類</summary>
public abstract class DBTypeFactory
{
public DBTypeFactory(){}
public abstract DBFactory GetDB();
}
/**//// <summary>具體工場角色類</summary>
public class SqlDataBase : DBTypeFactory
{
public SqlDataBase(){}
public override DBFactory GetDB()
{
return new SqlFactory();
}
}
/**//// <summary>具體工場角色類</summary>
public class AccessDataBase : DBTypeFactory
{
public AccessDataBase(){}
public override DBFactory GetDB()
{
return new AccessFactory();
}
}
}
三。抽象產品文件
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Configuration;
namespace DBFactory.AbstractFactory
{
/**//// <summary>抽象產品類</summary>
public abstract class DBFactory
{
public DBFactory(){}
private string connectionString;
/**//// <summary>數據庫連接字符串</summary>
public string ConnectionString
{
get
{
if(connectionString==null) connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
return connectionString;
}
set{connectionString = value;}
}
public abstract DataSet DataSetExecuteSql(string sqlString);
public abstract IDataReader DataReaderExecuteSql(string sqlString);
}
/**//// <summary>具體產品類</summary>
public class SqlFactory : DBFactory
{
public SqlFactory(){}
public override IDataReader DataReaderExecuteSql(string sqlString)
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectionString);
conn.Open();
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(sqlString,conn);
return comm.ExecuteReader();
}
public override DataSet DataSetExecuteSql(string sqlString)
{
DataSet ds = new DataSet();
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectionString);
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(sqlString,conn);
da.Fill(ds);
return ds;
}
}
/**//// <summary>具體產品類</summary>
public class AccessFactory : DBFactory
{
public AccessFactory(){}
public override IDataReader DataReaderExecuteSql(string sqlString)
{
OleDbConnection conn = new OleDbConnection(ConnectionString);
conn.Open();
OleDbCommand comm = new OleDbCommand(sqlString,conn);
return comm.ExecuteReader();
}
public override DataSet DataSetExecuteSql(string sqlString)
{
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection(ConnectionString);
OleDbDataAdapter da = new OleDbDataAdapter(sqlString,conn);
da.Fill(ds);
return ds;
}
}
}
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Configuration;
namespace DBFactory.AbstractFactory
{
/**//// <summary>抽象產品類</summary>
public abstract class DBFactory
{
public DBFactory(){}
private string connectionString;
/**//// <summary>數據庫連接字符串</summary>
public string ConnectionString
{
get
{
if(connectionString==null) connectionString = ConfigurationSettings.AppSettings["ConnectionString"];
return connectionString;
}
set{connectionString = value;}
}
public abstract DataSet DataSetExecuteSql(string sqlString);
public abstract IDataReader DataReaderExecuteSql(string sqlString);
}
/**//// <summary>具體產品類</summary>
public class SqlFactory : DBFactory
{
public SqlFactory(){}
public override IDataReader DataReaderExecuteSql(string sqlString)
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectionString);
conn.Open();
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(sqlString,conn);
return comm.ExecuteReader();
}
public override DataSet DataSetExecuteSql(string sqlString)
{
DataSet ds = new DataSet();
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectionString);
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(sqlString,conn);
da.Fill(ds);
return ds;
}
}
/**//// <summary>具體產品類</summary>
public class AccessFactory : DBFactory
{
public AccessFactory(){}
public override IDataReader DataReaderExecuteSql(string sqlString)
{
OleDbConnection conn = new OleDbConnection(ConnectionString);
conn.Open();
OleDbCommand comm = new OleDbCommand(sqlString,conn);
return comm.ExecuteReader();
}
public override DataSet DataSetExecuteSql(string sqlString)
{
DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection(ConnectionString);
OleDbDataAdapter da = new OleDbDataAdapter(sqlString,conn);
da.Fill(ds);
return ds;
}
}
}
以上就實現了一個簡單的采用抽象工場模式來實現數據庫操作的類,下面看看我們是如何調用的:
string connString = "data source=192.168.1.9;initial catalog=sqldll;persist security info=False;user id=sa;password=123456;workstation id=Server;packet size=4096";
string commString = "select * from tbl_Vip";
DBTypeFactory dbtypefactory = new SqlDataBase();//AccessDataBase();
DBFactory.AbstractFactory.DBFactory dbfactory = dbtypefactory.GetDB();
dbfactory.ConnectionString = connString;
DataGrid1.DataSource = dbfactory.DataSetExecuteSql(commString);
DataGrid1.DataBind();
string commString = "select * from tbl_Vip";
DBTypeFactory dbtypefactory = new SqlDataBase();//AccessDataBase();
DBFactory.AbstractFactory.DBFactory dbfactory = dbtypefactory.GetDB();
dbfactory.ConnectionString = connString;
DataGrid1.DataSource = dbfactory.DataSetExecuteSql(commString);
DataGrid1.DataBind();
是不是與以上寫的關於工場方法模式實現數據庫操作的類相比更加簡單些:)
四.工場方法模式與抽象工場模式
从以上我们可以得出工场方法模式与抽象工场模式的区别,以及何时该采用工场方法模式何时该采用抽象工场模式来设计.
工场方法模式:用简单明了的话来说就是如一个生产镜片的工厂生产树脂镜片与玻璃镜片,那么何时该生产树脂镜片,何时该生产玻璃镜片呢。这就是工厂方法模式的实现.
抽象工场模式:是比工厂方法模式更加抽象的概念,如一个生成眼镜的工厂它相对于眼镜的品牌来讲就是一个抽象工场的模式。
- 再谈Abstract Factory模式来实现数据库操作的类
- Factory Method来实现数据库操作的类
- C++实现Abstract Factory模式
- Abstract Factory模式的概念
- 抽象工厂(Abstract Factory)模式的Java实现[00原创]
- Factory, Abstract Factory, Factory Method, 和Builder模式的思考
- 设计模式实现(二): Abstract Factory Pattern
- C++实现Creational - Abstract Factory模式
- Factory模式和Abstract Factory模式的区别
- Abstract Factory设计模式的一些思考
- Abstract Factory 与builder模式的区别
- builder和abstract factory模式的区别
- Abstract Factory模式的几个要点
- Abstract Factory 模式
- Abstract Factory模式
- abstract Factory模式
- Abstract Factory模式
- Abstract Factory模式示例
- 再次听到MSRA这个词
- 获取正在执行的文件名
- 循环换行程序实例
- Factory Method来实现数据库操作的类
- 工作日志 - FTP上传类源代码
- 再谈Abstract Factory模式来实现数据库操作的类
- C#如何读取Excel表格数据并显示到GridView控件
- 什么是Debian?
- PHP的FTP操作函数大全
- 号称是完整版的
- PHP目录文件操作函数目录操作详谈
- 最近比较烦!
- 预览待上传的本地文件
- PHP删除和移动整个文件夹