【问题标题】:Abstract Factory and Factory pattern in DbProviderFactory ADO.Net?DbProviderFactory ADO.Net 中的抽象工厂和工厂模式?
【发布时间】:2012-04-08 01:52:33
【问题描述】:

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

Abstract Factory:“为创建相关或依赖对象系列提供一个接口,而无需指定它们的具体类。”

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

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

所以这里 (DbConnection CreateConnection()) 行是工厂方法,因为它定义了创建对象的接口,但是让 SqlProviderFactory 和 OracleProviderFactory 等子类决定创建什么实例。 Sql 提供者将创建 SqlConnection,Oracle 提供者将创建 OracleConnection,这些类型从 DbConnection 继承。

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

【问题讨论】:

    标签: .net design-patterns factory-pattern


    【解决方案1】:

    是的,Factory 和 Abstract Factory 之间的唯一区别是抽象,因此保留了 Factory 这个名称。因此,在所有情况下,抽象工厂本质上都是一组 1 个或多个工厂。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 欢迎您,我建议您查看“Head first design patterns”一书 - 对工厂、工厂方法和抽象工厂的描述非常好。顺便说一句,有时抽象工厂可以通过代理而不是工厂方法来实现(但无论如何都应该创建数据库对象,这里不会复制)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2011-01-05
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多