// 摘要: // 表示一组方法,这些方法用于创建提供程序对数据源类的实现的实例。 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(); } }