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

时间:2016-03-14 12:46:04

标签: java design-patterns abstract-factory

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

  1. 抽象基地工厂
  2. 具体工厂各自扩展抽象基地工厂
  3. 客户代码
  4. 基础产品
  5. 扩展基础产品的具体产品类
  6. 我已经在各种实现中看到并观察到客户端代码知道具体工厂。 根据我在不同地方看到的模式的通用定义如下

      

    定义用于创建对象的接口,但让子类决定实例化哪个类。

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

    即使基本抽象工厂类不存在,客户端代码也可以简单地调用具体工厂类对象上的createProduct方法,因为客户端代码可以看到具体的工厂类。

    我觉得抽象基类只适用于以下情况

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

    请提供宝贵的意见。

2 个答案:

答案 0 :(得分:2)

客户不应该了解任何具体的工厂。抽象工厂应该隐藏工厂实现细节,允许不同的工厂进行交换而不影响客户端。

表明AbstractFactory模式的目的是生产混凝土工厂的答案是完全错误的。不幸的是,这种错误信息看似直观,因此不正确的定义在SO上猖獗,许多人都有数百个赞成票。

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

答案 1 :(得分:2)

抽象工厂不必是抽象类,大多数时候它只是一个接口。

使用的混凝土工厂应注入DI。这样,工厂的消费者就不知道使用哪一个。