.NET中的抽象工厂
来源:互联网 发布:网络13邯大主教楼视频 编辑:程序博客网 时间:2024/06/11 08:19
我们说过,抽象工厂针对系列产品的应变。在使用ADO.NET进行数据访问的时候,如果目标数据库是Access,我们会使用OleDbConnection、OleDbCommand以及OleDbDataAdapter等一系列ADO.NET对象。那么如果数据库是SQL Server,我们又会改用SqlConnection、SqlCommand以及SqlDataAdapter等一系列ADO.NET对象。如果只使用一套对象,没有什么大问题,如果我们的数据访问有系列变化的需求,比如可以针对Access和SQL Server,而且希望改换数据库尽量对客户端代码透明,那么就需要引入抽象工厂模式。
好在,ADO.NET 2.0中已经有了整套抽象工厂的类型。看下面的代码,你应该能辨别这些类型在抽象工厂中的角色:
public abstract class DbProviderFactory
{
// Methods
protected DbProviderFactory()
{
}
public virtual DbCommand CreateCommand()
{
return null;
}
public virtual DbCommandBuilder CreateCommandBuilder()
{
return null;
}
public virtual DbConnection CreateConnection()
{
return null;
}
public virtual DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return null;
}
public virtual DbDataAdapter CreateDataAdapter()
{
return null;
}
public virtual DbDataSourceEnumerator CreateDataSourceEnumerator()
{
return null;
}
public virtual DbParameter CreateParameter()
{
return null;
}
public virtual CodeAccessPermission CreatePermission(PermissionState state)
{
return null;
}
// Properties
public virtual bool CanCreateDataSourceEnumerator
{
get
{
return false;
}
}
}
public sealed class OleDbFactory : DbProviderFactory
{
// Fields
public static readonly OleDbFactory Instance = new OleDbFactory();
// Methods
private OleDbFactory()
{
}
public override DbCommand CreateCommand()
{
return new OleDbCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new OleDbCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new OleDbConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return new OleDbConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new OleDbDataAdapter();
}
public override DbParameter CreateParameter()
{
return new OleDbParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new OleDbPermission(state);
}
}
public sealed class SqlClientFactory : DbProviderFactory, IServiceProvider
{
// Fields
public static readonly SqlClientFactory Instance = new SqlClientFactory();
// Methods
private SqlClientFactory()
{
}
public override DbCommand CreateCommand()
{
return new SqlCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new SqlCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new SqlConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return new SqlConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new SqlDataAdapter();
}
public override DbDataSourceEnumerator CreateDataSourceEnumerator()
{
return SqlDataSourceEnumerator.Instance;
}
public override DbParameter CreateParameter()
{
return new SqlParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new SqlClientPermission(state);
}
object IServiceProvider.GetService(Type serviceType)
{
object obj2 = null;
if (serviceType == GreenMethods.SystemDataCommonDbProviderServices_Type)
{
obj2 = GreenMethods.SystemDataSqlClientSqlProviderServices_Instance();
}
return obj2;
}
// Properties
public override bool CanCreateDataSourceEnumerator
{
get
{
return true;
}
}
}
{
// Methods
protected DbProviderFactory()
{
}
public virtual DbCommand CreateCommand()
{
return null;
}
public virtual DbCommandBuilder CreateCommandBuilder()
{
return null;
}
public virtual DbConnection CreateConnection()
{
return null;
}
public virtual DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return null;
}
public virtual DbDataAdapter CreateDataAdapter()
{
return null;
}
public virtual DbDataSourceEnumerator CreateDataSourceEnumerator()
{
return null;
}
public virtual DbParameter CreateParameter()
{
return null;
}
public virtual CodeAccessPermission CreatePermission(PermissionState state)
{
return null;
}
// Properties
public virtual bool CanCreateDataSourceEnumerator
{
get
{
return false;
}
}
}
public sealed class OleDbFactory : DbProviderFactory
{
// Fields
public static readonly OleDbFactory Instance = new OleDbFactory();
// Methods
private OleDbFactory()
{
}
public override DbCommand CreateCommand()
{
return new OleDbCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new OleDbCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new OleDbConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return new OleDbConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new OleDbDataAdapter();
}
public override DbParameter CreateParameter()
{
return new OleDbParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new OleDbPermission(state);
}
}
public sealed class SqlClientFactory : DbProviderFactory, IServiceProvider
{
// Fields
public static readonly SqlClientFactory Instance = new SqlClientFactory();
// Methods
private SqlClientFactory()
{
}
public override DbCommand CreateCommand()
{
return new SqlCommand();
}
public override DbCommandBuilder CreateCommandBuilder()
{
return new SqlCommandBuilder();
}
public override DbConnection CreateConnection()
{
return new SqlConnection();
}
public override DbConnectionStringBuilder CreateConnectionStringBuilder()
{
return new SqlConnectionStringBuilder();
}
public override DbDataAdapter CreateDataAdapter()
{
return new SqlDataAdapter();
}
public override DbDataSourceEnumerator CreateDataSourceEnumerator()
{
return SqlDataSourceEnumerator.Instance;
}
public override DbParameter CreateParameter()
{
return new SqlParameter();
}
public override CodeAccessPermission CreatePermission(PermissionState state)
{
return new SqlClientPermission(state);
}
object IServiceProvider.GetService(Type serviceType)
{
object obj2 = null;
if (serviceType == GreenMethods.SystemDataCommonDbProviderServices_Type)
{
obj2 = GreenMethods.SystemDataSqlClientSqlProviderServices_Instance();
}
return obj2;
}
// Properties
public override bool CanCreateDataSourceEnumerator
{
get
{
return true;
}
}
}
- .NET中的抽象工厂
- java中的抽象工厂模式
- Net框架中的设计模式之Builder(构造者)--兼谈抽象工厂和composite模式
- .net中的抽象方法
- 介绍ASP.NET抽象工厂模式概念
- 介绍ASP.NET抽象工厂模式概念
- NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- 介绍ASP.NET抽象工厂模式概念
- .NET设计模式(3): 抽象工厂
- Asp.net的抽象工厂模式
- VB.NET机房收费 & 抽象工厂模式
- 神州数码招聘软件测试工程师一道SQL笔试题
- 导致Lucene无法索引查询的NoClassDefFoundError
- Lotus Notes Traveler 测试成功 !上图~~~
- xp文件夹加密及文件加密应用详解
- 无废话C#设计模式之三:Abstract Factory
- .NET中的抽象工厂
- Struts的工作流程
- 《武林外传》之(零) 管理演绎
- xsl 应用实例
- 修改密码
- sqlserver数据还原或者转移后,出现孤立帐号问题的解决方案,表更改用户为DBO
- sql存储过程的 TOP 后跟变量报错的解决办法
- 数据库连接
- Java与.Net环境下RSA加密解密交互不成功的问题解决