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

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

  • 抽象基地工厂
  • 具体工厂每个扩展抽象基地工厂
  • 客户端代码
  • 基础产品
  • 具体产品类扩展基础产品
  • 我已经看到了各种实现,并观察到客户端代码知道具体的工厂。 根据我在不同地方看到的模式的通用定义如下

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

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

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

    我觉得抽象基类只在以下情况下有用

    如果我们有代码来创建具体工厂类的对象,而不是调用这些对象的getProduct方法的代码。 实例化concrete Factory classes代码可以将工厂放入某个队列中,然后可以迭代后面的队列并获得Concrete products

    请提供您宝贵的意见。


    客户不应该有任何具体工厂的知识。 抽象工厂应该隐藏工厂实现细节,允许不同的工厂进出,而不会影响客户。

    建议AbstractFactory模式的目的是为了生产具体的工厂是错误的。 不幸的是,这些错误信息看起来很直观,所以不正确的定义在SO上猖獗,许多人都赞成。

    这里的答案给了AbstractFactory一个很好的解释; 但要注意建议重复的评论。 链接线程中的答案会破坏对模式的任何理解。


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

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

    链接地址: http://www.djcxy.com/p/85119.html

    上一篇: Why base abstract factory is needed Abstract factory pattern?

    下一篇: What is the difference between the template method and the strategy patterns?