C#语言设计模式之三:Abstract Factory
时间:2007-10-19 09:40:25
来源:中国IT者 作者:ChinaITzhe 编辑:gaopoadmin
.NET中的抽象工厂
我们说过,抽象工厂针对系列产品的应变。在使用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; } } } |
关键字:C#语言,设计模式,之三,Abstract Factory











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面