DbProviderFactory ADO.Net中的抽象工厂和工厂模式?

时间:2012-03-23 13:47:15

标签: .net design-patterns factory-pattern

DbProviderFactory inheritance

此继承可在ADO.Net中找到。我们可以说这两种设计模式都在使用,抽象工厂和工厂方法吗?

抽象工厂:“提供用于创建相关或从属对象族的接口,而无需指定其具体类。”

所以这里DbProviderFactory是一个用于创建相关对象系列的接口,即DbConnection,DbCommand,它们都与某些数据库提供程序(如Sql或Oracle提供程序)相关。

工厂方法:“定义用于创建对象的接口,但是让子类决定实例化哪个类.Pactor Method允许类将实例化推迟到子类。”

所以这里的行(DbConnection CreateConnection())是工厂方法,因为它定义了用于创建对象的接口,但让像SqlProviderFactory和OracleProviderFactory这样的子类决定要创建的实例。 Sql提供程序将创建SqlConnection,Oracle提供程序将创建OracleConnection,这些类型继承自DbConnection。

我们可以说DbProviderFactory类中的每个方法都是一个工厂方法,整个模式是抽象工厂吗?

2 个答案:

答案 0 :(得分:1)

是的,DbProviderFactory是抽象工厂模式的一个很好的例子。此工厂的每个CreateXXX方法都是FactoryMethod。

答案 1 :(得分:0)

是的,Factory和Abstract Factory之间的唯一区别是抽象,因此保留了Factory的名称。因此,抽象工厂本质上是一组一个或多个工厂。