资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库层抽象工厂数据库层抽象工厂数据库层抽象工厂解决方案归档不断升级版 日期:2005-1-22 作者: 人气:6 简单工厂模式就是根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个共同的父类和共同的方法,但是每个方法执行的任务不同,而且根据不同的数据进行了优化。比如 X 是一个基类,xy 和 xz 是从它派生出来的,XFactory 类根据给出的参数决定返回那一个子类,返回那一个类的实例与程序员无关,因为这些类有同样的方法,只是实现不同,返回那个类的实例取决于工厂,工厂功能可能很复杂,但通常都是相当简间的.接下来我们用一个例子来说明这个简单的工厂模式.假如我们要输入一个人的姓名,有两个方式,一种是“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 中将名字分成了两部分.在 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 类中,用逗号给 lastname 划分界限.当空格或逗号不存在时,两个类都提供了错误校正处理.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 中保护变量中.所以在派生类中根本不需要任何 getFirstName 和 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 NameFactory ();CName name = nf.getName(sName);string sFristName = name.getFristName();string sLastName = name.getLastName();这种方法把和数据相关的问题与类的其它的方法分隔开来。采用抽象工厂模式设计出的系统类图如下:数据库层抽象工厂解决方案归档:(1)AbstractDbFactory.csusing System;using System.Data;namespace DbService/ / 数据库抽象工厂接口/ public interface AbstractDbFactory/ / 建立默认连接/ / 数据库连接IDbConnection CreateConnection();/ / 根据连接字符串建立 Connection 对象/ / 连接字符串/ Connection 对象IDbConnection CreateConnection(string strConn);/ / 建立 Command 对象/ / Command 对象IDbCommand CreateCommand();/ / 建立 DataAdapter 对象/ / DataAdapter 对象IDbDataAdapter CreateDataAdapter();/ / 根据 Connection 建立 Transaction/ / Connection 对象/ Transaction 对象IDbTransaction CreateTransaction(IDbConnection myDbConnection);/ / 根据 Command 建立 DataReader/ / Command 对象/ DataReader 对象IDataReader CreateDataReader(IDbCommand myDbCommand);/ / 获得连接字符串/ / 连接字符串string GetConnectionString();(2)Factory.csusing System;using 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(singleFactory = 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“:abstractDbFactory = 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.Data.SqlClient;using System.Configuration;namespace DbService/ / 针对 SqlServer 专用连接的工厂/ public class SqlFactory : AbstractDbFactory/ / 构造函数/ public SqlFactory()/ / 建立默认 Connection 对象/ / Connection 对象public IDbConnection CreateConnection()return new SqlConnection();/ / 根据连接字符串建立 Connection 对象/ / 连接字符串/ 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();/ / 根据 Connection 建立 Transaction/ / Connection 对象/ Transaction 对象public IDbTransaction CreateTransaction(IDbConnection myDbConnection)return myDbConnection.BeginTransaction();/ / 根据 Command 建立 DataReader/ / Command 对象/ DataReader 对象public IDataReader CreateDataReader(IDbCommand myDbCommand)return myDbCommand.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;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号