再谈Abstract Factory模式来实现数据库操作的类
2007-12-25 22:50
260 查看
在前面(/article/5003975.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();
}
}
}
三。抽象產品文件
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;
}
}
}
以上就實現了一個簡單的采用抽象工場模式來實現數據庫操作的類,下面看看我們是如何調用的:
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();
是不是與以上寫的關於工場方法模式實現數據庫操作的類相比更加簡單些:)
四.工場方法模式與抽象工場模式
从以上我们可以得出工场方法模式与抽象工场模式的区别,以及何时该采用工场方法模式何时该采用抽象工场模式来设计.
工场方法模式:用简单明了的话来说就是如一个生产镜片的工厂生产树脂镜片与玻璃镜片,那么何时该生产树脂镜片,何时该生产玻璃镜片呢。这就是工厂方法模式的实现.
抽象工场模式:是比工厂方法模式更加抽象的概念,如一个生成眼镜的工厂它相对于眼镜的品牌来讲就是一个抽象工场的模式。
一。簡單的類圖
二。抽象工場文件
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();
}
}
}
三。抽象產品文件
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;
}
}
}
以上就實現了一個簡單的采用抽象工場模式來實現數據庫操作的類,下面看看我們是如何調用的:
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();
是不是與以上寫的關於工場方法模式實現數據庫操作的類相比更加簡單些:)
四.工場方法模式與抽象工場模式
从以上我们可以得出工场方法模式与抽象工场模式的区别,以及何时该采用工场方法模式何时该采用抽象工场模式来设计.
工场方法模式:用简单明了的话来说就是如一个生产镜片的工厂生产树脂镜片与玻璃镜片,那么何时该生产树脂镜片,何时该生产玻璃镜片呢。这就是工厂方法模式的实现.
抽象工场模式:是比工厂方法模式更加抽象的概念,如一个生成眼镜的工厂它相对于眼镜的品牌来讲就是一个抽象工场的模式。
相关文章推荐
- mybatis 操作数据库的 单例模式实现
- 再谈Abstract Factory模式来实现数据库操作的类
- Spring使用JdbcTemplate实现对数据库操作
- SQLITE学习笔记一(打开、操作及关闭数据库,C程序实现)
- JAVA操作数据库方式与设计模式应用
- Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
- SAP 设定新的操作模式实现进程的优化
- PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码
- 使用模块Q的promise机制实现数据库操作的同步问题
- 用强制订阅实现数据库同步操作
- 数据库的插入、修改、删除操作(java实现)
- Statement语句实现数据库的增删改查操作
- JDBC-DAO经典模式 实现对数据库的增、删、改、查
- Factory Method来实现数据库操作的类
- [数据库] Navicat for MySQL事件Event实现数据每日定期操作
- 用强制订阅实现数据库同步操作
- js连接AWS DynamoDB数据库实现CEUD操作
- Matlab连接MySQL并实现简单的数据库操作
- java-DAO模式实现数据库增,删,改,查和传统模式实现数据库增,删,改,查对比-JDBC
- mybatis的接口实现操作数据库(注解)