数据库层抽象工厂

上传人:子 文档编号:42860034 上传时间:2018-06-04 格式:DOC 页数:34 大小:24.24KB
返回 下载 相关 举报
数据库层抽象工厂_第1页
第1页 / 共34页
数据库层抽象工厂_第2页
第2页 / 共34页
数据库层抽象工厂_第3页
第3页 / 共34页
数据库层抽象工厂_第4页
第4页 / 共34页
数据库层抽象工厂_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《数据库层抽象工厂》由会员分享,可在线阅读,更多相关《数据库层抽象工厂(34页珍藏版)》请在金锄头文库上搜索。

1、数据库层抽象工厂数据库层抽象工厂数据库层抽象工厂解决方案归档不断升级版 日期:2005-1-22 作者: 人气:6 简单工厂模式就是根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个共同的父类和共同的方法,但是每个方法执行的任务不同,而且根据不同的数据进行了优化。比如 X 是一个基类,xy 和 xz 是从它派生出来的,XFactory 类根据给出的参数决定返回那一个子类,返回那一个类的实例与程序员无关,因为这些类有同样的方法,只是实现不同,返回那个类的实例取决于工厂,工厂功能可能很复杂,但通常都是相当简间的.接下来我们用一个例子来说明这个简单的工厂模式.假如我们要输入一

2、个人的姓名,有两个方式,一种是“firstname lastname” 和“fristname,lastname”形式.我们的任务就是要确定 lastname 和firstname 是否是逗号来确定姓名的先后.第一步,设计一个父类:public class CName protected string frName ,lName;public string getFristName() return frName;public string getLastName() return lName;第二步,设计两个子类,它是由类 CName 的派生的。它们现实了接口,并在构造 function 中

3、将名字分成了两部分.在 CFirstFirst 类中,做了一个简单的假设:最后一个空格前面的所有部分都属与firstname.public class CFirstFirst : CName public CFirstFirst (string sName) int i = sName.Trim().Indexof(” “);if ( i 0 ) frName = name.Substring(0,i).Trim();lName = name.Substring(i+1).Trim();else lName = sName;frName = “”;在 LastFist 类中,用逗号给 last

4、name 划分界限.当空格或逗号不存在时,两个类都提供了错误校正处理.public class LastFrist :CName public LastFrist(string sName) int i = sName.Indexof(”,”);if ( i0 ) if ( i 0 ) lName = name.Substring(0,i).Trim();frName = name.Substring(i+1).Trim();else lName = sName;frName = “”;两种情况下,都把分开的名字保存在基类的 CName 中保护变量中.所以在派生类中根本不需要任何 getFir

5、stName 和 getLastName 方法,因为基类中已给出.第三步: 构造简单工厂.现在很容易给出简单工厂类.只检查逗号来决定返回那个类的实例public class NameFactory () public CName getName(string sname) int i = sname.Indexof(”,”);if ( i 0 )return new LastFrist (sname);elsereturn new CFirstFirst (sname);第四步。使用工厂类:string sName = “cedy hao”;NameFactory nf = new NameF

6、actory ();CName name = nf.getName(sName);string sFristName = name.getFristName();string sLastName = name.getLastName();这种方法把和数据相关的问题与类的其它的方法分隔开来。采用抽象工厂模式设计出的系统类图如下:数据库层抽象工厂解决方案归档:(1)AbstractDbFactory.csusing System;using System.Data;namespace DbService/ / 数据库抽象工厂接口/ public interface AbstractDbFactor

7、y/ / 建立默认连接/ / 数据库连接IDbConnection CreateConnection();/ / 根据连接字符串建立 Connection 对象/ / 连接字符串/ Connection 对象IDbConnection CreateConnection(string strConn);/ / 建立 Command 对象/ / Command 对象IDbCommand CreateCommand();/ / 建立 DataAdapter 对象/ / DataAdapter 对象IDbDataAdapter CreateDataAdapter();/ / 根据 Connection

8、 建立 Transaction/ / Connection 对象/ Transaction 对象IDbTransaction CreateTransaction(IDbConnection myDbConnection);/ / 根据 Command 建立 DataReader/ / Command 对象/ DataReader 对象IDataReader CreateDataReader(IDbCommand myDbCommand);/ / 获得连接字符串/ / 连接字符串string GetConnectionString();(2)Factory.csusing System;usin

9、g System.Configuration;namespace DbService/ / Factory 类/ public sealed class Factoryprivate static volatile Factory singleFactory = null;private static object syncObj = new object();/ / Factory 类构造函数/ private Factory()/ / 获得 Factory 类的实例/ / Factory 类实例public static Factory GetInstance()if(singleFact

10、ory = null)lock(syncObj)if(singleFactory = null)singleFactory = new Factory();return singleFactory;/ / 建立 Factory 类实例/ / Factory 类实例public AbstractDbFactory CreateInstance()AbstractDbFactory abstractDbFactory = null;switch(ConfigurationSettings.AppSettings“DatabaseType“.ToLower()case “sqlserver“:abs

11、tractDbFactory = new SqlFactory();break;case “oledb“:abstractDbFactory = new OleDbFactory();break;case “odbc“:abstractDbFactory = new OdbcFactory();break; return abstractDbFactory;以下 3 个类分别是 Factory 针对 SqlServer 专用连接、OleDb连接和 Odbc 连接时的具体实现:(3)SqlFactory.csusing System;using System.Data;using System.

12、Data.SqlClient;using System.Configuration;namespace DbService/ / 针对 SqlServer 专用连接的工厂/ public class SqlFactory : AbstractDbFactory/ / 构造函数/ public SqlFactory()/ / 建立默认 Connection 对象/ / Connection 对象public IDbConnection CreateConnection()return new SqlConnection();/ / 根据连接字符串建立 Connection 对象/ / 连接字符串

13、/ Connection 对象public IDbConnection CreateConnection(string strConn)return new SqlConnection(strConn);/ / 建立 Command 对象/ / Command 对象public IDbCommand CreateCommand()return new SqlCommand();/ / 建立 DataAdapter 对象/ / DataAdapter 对象public IDbDataAdapter CreateDataAdapter()return new SqlDataAdapter();/

14、/ 根据 Connection 建立 Transaction/ / Connection 对象/ Transaction 对象public IDbTransaction CreateTransaction(IDbConnection myDbConnection)return myDbConnection.BeginTransaction();/ / 根据 Command 建立 DataReader/ / Command 对象/ DataReader 对象public IDataReader CreateDataReader(IDbCommand myDbCommand)return myDb

15、Command.ExecuteReader();/ / 获得连接字符串/ / 连接字符串public string GetConnectionString()string strServer = ConfigurationSettings.AppSettings“SqlServerServer“;string strDatabase = ConfigurationSettings.AppSettings“SqlServerDatabase“;string strUid = ConfigurationSettings.AppSettings“SqlServerUid“;string strPwd = ConfigurationSettings.AppSettings“SqlServerPwd“;string strConnectionString = “Server = “ + strServer + “; Database = “ + strDatabase + “; Uid = “ + strUid + “; Pwd = “ + strPwd + “;“;return strConnectionString;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号