为什么需要基础抽象工厂抽象工厂模式?

Why base abstract factory is needed Abstract factory pattern?

在抽象工厂模式中涉及的主要实体是

  1. 抽象基工厂
  2. 具体工厂各自扩展抽象基础工厂
  3. 客户代码
  4. 基础产品
  5. 具体产品class扩展基础产品

我看过各种实现并观察到客户端代码了解具体工厂。 根据我在不同地方看到的模式的通用定义如下

Defines an interface for creating objects, but let sub-classes to decide which class to instantiate.

根据我的观察,createProduct在抽象工厂方法中被实现为抽象方法。它公开了一个非抽象的 public 方法,比如 getProduct 从调用 createProduct 方法的地方。根据具体工厂的 运行 时间对象 class createProduct 被相应地调用。

即使基础抽象工厂 class 不存在,客户端代码也可以简单地调用具体工厂 class 对象上的 createProduct 方法作为具体工厂 classes 对客户端代码可见。

我觉得 Abstract base class 仅在以下情况下有用

如果我们有创建具体工厂对象的代码 classes 与在这些对象上调用 getProduct 方法的代码分开。实例化 concrete Factory classescan 的代码 将工厂放在某个队列中,稍后可以迭代队列并且 Concrete products可以获得

请提供您宝贵的意见。

客户应该不了解任何具体的工厂。抽象工厂应该隐藏工厂实现细节,允许在不影响客户端的情况下换入换出不同的工厂。

暗示 AbstractFactory 模式的目的是生产具体工厂的答案是完全错误的。不幸的是,这种错误信息具有欺骗性的直觉,因此不正确的定义在 SO 上猖獗,许多人获得了数百票。

答案here对AbstractFactory给出了很好的解释;但要注意暗示重复的评论。链接线程中的答案会破坏对模式的任何理解。

抽象工厂不一定是抽象的class,大多数时候它只是一个接口。

要使用的具体工厂应该注入DI。这样工厂的消费者就不知道使用了哪一个。