zoukankan      html  css  js  c++  java
  • .NET中的抽象工厂

      l         我们说过,抽象工厂针对系列产品的应变。在使用ADO.NET进行数据访问的时候,如果目标数据库是Access,我们会使用OleDbConnection、OleDbCommand以及OleDbDataAdapter等一系列ADO.NET对象。那么如果数据库是SQL Server,我们又会改用SqlConnection、SqlCommand以及SqlDataAdapter等一系列ADO.NET对象。如果只使用一套对象,没有什么大问题,如果我们的数据访问有系列变化的需求,比如可以针对Access和SQL Server,而且希望改换数据库尽量对客户端代码透明,那么就需要引入抽象工厂模式。

    l         好在,ADO.NET 2.0中已经有了整套抽象工厂的类型。看下面的代码,你应该能辨别这些类型在抽象工厂中的角色:

        publicabstractclassDbProviderFactory

        {

            // Methods

            protected DbProviderFactory()

            {

            }

            publicvirtual DbCommand CreateCommand()

            {

                returnnull;

            }

            publicvirtual DbCommandBuilder CreateCommandBuilder()

            {

                returnnull;

            }

            publicvirtual DbConnection CreateConnection()

            {

                returnnull;

            }

            publicvirtual DbConnectionStringBuilder CreateConnectionStringBuilder()

            {

                returnnull;

            }

            publicvirtual DbDataAdapter CreateDataAdapter()

            {

                returnnull;

            }

            publicvirtual DbDataSourceEnumerator CreateDataSourceEnumerator()

            {

                returnnull;

            }

            publicvirtual DbParameter CreateParameter()

            {

                returnnull;

            }

            publicvirtual CodeAccessPermission CreatePermission(PermissionState state)

            {

                returnnull;

            }

            // Properties

            publicvirtualbool CanCreateDataSourceEnumerator

            {

                get

                {

                    returnfalse;

                }

            }

        }

       publicsealedclassOleDbFactory : DbProviderFactory

        {

            // Fields

            publicstaticreadonlyOleDbFactory Instance = newOleDbFactory();

            // Methods

            private OleDbFactory()

            {

            }

            publicoverride DbCommand CreateCommand()

            {

                returnnewOleDbCommand();

            }

            publicoverride DbCommandBuilder CreateCommandBuilder()

            {

                returnnewOleDbCommandBuilder();

            }

            publicoverride DbConnection CreateConnection()

            {

                returnnewOleDbConnection();

            }

            publicoverride DbConnectionStringBuilder CreateConnectionStringBuilder()

            {

                returnnewOleDbConnectionStringBuilder();

            }

            publicoverride DbDataAdapter CreateDataAdapter()

            {

                returnnewOleDbDataAdapter();

            }

            publicoverride DbParameter CreateParameter()

            {

                returnnewOleDbParameter();

            }

            publicoverride CodeAccessPermission CreatePermission(PermissionState state)

            {

                returnnewOleDbPermission(state);

            }

        }

        publicsealedclassSqlClientFactory : DbProviderFactory, IServiceProvider

        {

            // Fields

            publicstaticreadonlySqlClientFactory Instance = newSqlClientFactory();

            // Methods

            private SqlClientFactory()

            {

            }

            publicoverride DbCommand CreateCommand()

            {

                returnnewSqlCommand();

            }

            publicoverride DbCommandBuilder CreateCommandBuilder()

            {

                returnnewSqlCommandBuilder();

            }

            publicoverride DbConnection CreateConnection()

            {

                returnnewSqlConnection();

            }

            publicoverride DbConnectionStringBuilder CreateConnectionStringBuilder()

            {

                returnnewSqlConnectionStringBuilder();

            }

            publicoverride DbDataAdapter CreateDataAdapter()

            {

                returnnewSqlDataAdapter();

            }

            publicoverride DbDataSourceEnumerator CreateDataSourceEnumerator()

            {

                return SqlDataSourceEnumerator.Instance;

            }

            publicoverride DbParameter CreateParameter()

            {

                returnnewSqlParameter();

            }

            publicoverride CodeAccessPermission CreatePermission(PermissionState state)

            {

                returnnewSqlClientPermission(state);

            }

            objectIServiceProvider.GetService(Type serviceType)

            {

                object obj2 = null;

                if (serviceType == GreenMethods.SystemDataCommonDbProviderServices_Type)

                {

                    obj2 = GreenMethods.SystemDataSqlClientSqlProviderServices_Instance();

                }

                return obj2;

            }

            // Properties

            publicoverridebool CanCreateDataSourceEnumerator

            {

                get

                {

                    returntrue;

                }

            }

    }

  • 相关阅读:
    mysql 的远程链接字符
    SqlSessionFactoryUtil
    mysql 的链接字符
    web 项目运用通用的xml配置
    配置文件转意符使用
    new和newInstance的区别
    子选择器与后代选择器的区别
    Vivado_HLS 学习笔记1-数据类型
    Vivado_HLS 学习笔记3-循环的pipeline与展开
    Vivado_HLS 学习笔记2-接口综合
  • 原文地址:https://www.cnblogs.com/nianshi/p/941710.html
Copyright © 2011-2022 走看看