2012-03-23 134 views
0

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

该继承存在于ADO.Net中。我们可以说在这里两个设计模式都在使用,抽象工厂和工厂方法?

抽象工厂:“提供一个接口来创建相关或依赖对象的族,而不指定它们的具体类。”

因此,这里DbProviderFactory是一个用于创建相关对象系列的接口,即DbConnection,DbCommand,它们都与某些数据库提供者(如Sql或Oracle提供者)相关。工厂方法:“定义一个创建对象的接口,但让子类决定实例化哪个类。Factory方法让类将实例化推迟到子类。”因此,这里的行(DbConnection CreateConnection())是工厂方法,因为它定义了创建对象的接口,但让子类(如SqlProviderFactory和OracleProviderFactory)决定创建哪个实例。 Sql提供者将创建SqlConnection,并且Oracle提供者将创建OracleConnection,并且这些类型从DbConnection继承。

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

回答

0

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

+0

谢谢lazyberezovsky ... – CleanBold 2012-03-24 09:27:37

+0

我欢迎您,我建议您查看书'头第一个设计模式' - 有非常好的描述工厂,工厂方法和抽象工厂。顺便说一句,有时抽象工厂可以通过代理而不是工厂方法来实现(但数据库对象应该创建,无论如何,复制不会到这里) – 2012-03-24 09:35:55

0

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

+0

谢谢贾斯汀... – CleanBold 2012-03-24 09:28:01