zoukankan      html  css  js  c++  java
  • 抽象工厂

        // 摘要:
        //     表示一组方法,这些方法用于创建提供程序对数据源类的实现的实例。
        public abstract class DbProviderFactory
        {
            // 摘要:
            //     初始化 System.Data.Common.DbProviderFactory 类的新实例。
            protected DbProviderFactory();
    
            // 摘要:
            //     指定特定的 System.Data.Common.DbProviderFactory 是否支持 System.Data.Common.DbDataSourceEnumerator
            //     类。
            //
            // 返回结果:
            //     如果 System.Data.Common.DbProviderFactory 的实例支持 System.Data.Common.DbDataSourceEnumerator
            //     类,则为 true;否则为 false。
            public virtual bool CanCreateDataSourceEnumerator { get; }
    
            // 摘要:
            //     返回实现 System.Data.Common.DbCommand 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbCommand 的新实例。
            public virtual DbCommand CreateCommand();
            //
            // 摘要:
            //     返回实现 System.Data.Common.DbCommandBuilder 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbCommandBuilder 的新实例。
            public virtual DbCommandBuilder CreateCommandBuilder();
            //
            // 摘要:
            //     返回实现 System.Data.Common.DbConnection 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbConnection 的新实例。
            public virtual DbConnection CreateConnection();
            //
            // 摘要:
            //     返回实现 System.Data.Common.DbConnectionStringBuilder 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbConnectionStringBuilder 的新实例。
            public virtual DbConnectionStringBuilder CreateConnectionStringBuilder();
            //
            // 摘要:
            //     返回实现 System.Data.Common.DbDataAdapter 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbDataAdapter 的新实例。
            public virtual DbDataAdapter CreateDataAdapter();
            //
            // 摘要:
            //     返回实现 System.Data.Common.DbDataSourceEnumerator 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbDataSourceEnumerator 的新实例。
            public virtual DbDataSourceEnumerator CreateDataSourceEnumerator();
            //
            // 摘要:
            //     返回实现 System.Data.Common.DbParameter 类的提供程序的类的一个新实例。
            //
            // 返回结果:
            //     System.Data.Common.DbParameter 的新实例。
            public virtual DbParameter CreateParameter();
            //
            // 摘要:
            //     返回提供程序的类的新实例,该实例可实现提供程序的 System.Security.CodeAccessPermission 类的版本。
            //
            // 参数:
            //   state:
            //     System.Security.Permissions.PermissionState 值之一。
            //
            // 返回结果:
            //     指定 System.Security.Permissions.PermissionState 的 System.Security.CodeAccessPermission
            //     对象。
            public virtual CodeAccessPermission CreatePermission(PermissionState state);
        }

     工厂方法模式可以克服简单工厂设计模式的难以扩展缺点,工厂方法模式中每个具体工厂中只完成单个实例的创建,因此具有很好的可扩展性。但是不论编程上还是现实中,一个工厂只创建单个实例或产品是不太合理的,这样子太浪费资源。我们的工厂应该是能创建一系列的产品,继续拿笔记本工厂为例子,一个联想笔记本的工厂,不可能只生产一个型号的联想笔记本,这样子,工厂方法模式就不适用了,但是抽象工厂模式就可以很好解决这个问题。

    定义了一个interface(接口)用于创建相关或有依赖关系的对象,而无需指明具体类。

    将工厂抽象成两层,AbstractFactory(抽象工厂)和具体实现的工厂子类,程序员可以根据创建对象类型使用对应的工厂子类,这样将简单的工厂类变成了工厂簇,更便于代码的维护和拓展。

      abstract class AbstractFactory
      {
        public abstract AbstractProductA CreateProductA();
        public abstract AbstractProductB CreateProductB();
      }
      class ConcreteFactory1 : AbstractFactory
      {
        public override AbstractProductA CreateProductA()
        {
          return new ProductA1();
        }
        public override AbstractProductB CreateProductB()
        {
          return new ProductB1();
        }
      }
     
      class ConcreteFactory2 : AbstractFactory
      {
        public override AbstractProductA CreateProductA()
        {
          return new ProductA2();
        }
        public override AbstractProductB CreateProductB()
        {
          return new ProductB2();
        }
      }




  • 相关阅读:
    Java实现文件夹下文件实时监控
    JAVA读取文件夹大小
    Java获取Linux上指定文件夹下所有第一级子文件夹
    自定义日志框架实现
    Node爬取简书首页文章
    NodeJS多进程
    NodeJS 连接接MySQL
    NodeJS Web模块
    NodeJS 模块&函数
    NodeJS Stream流
  • 原文地址:https://www.cnblogs.com/vichin/p/11585940.html
Copyright © 2011-2022 走看看