首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么需要抽象工厂模式?

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

Stack Overflow用户
提问于 2016-03-14 12:46:03
回答 2查看 345关注 0票数 2

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

  1. 抽象基地工厂
  2. 混凝土工厂各扩建抽象基地工厂
  3. 客户端代码
  4. 基积
  5. 扩展基础产品的具体产品类

我在各种实现中都见过,并且观察到客户端代码知道具体工厂。根据我在不同地方看到的模式的共同定义,如下所示

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

根据我的观察,createProduct是抽象工厂方法中的抽象方法。它公开了一个非抽象的公共方法,比如getProduct,它从这里调用createProduct方法。根据具体工厂类的运行时对象,相应地调用createProduct

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

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

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

请提供您宝贵的反馈。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-14 14:30:48

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

认为AbstractFactory模式的目的是生产混凝土工厂的答案是完全错误的。不幸的是,这种错误的信息具有欺骗性的直觉性,因此错误的定义非常猖獗,许多错误的定义拥有数百个用户。

here的答案对AbstractFactory给出了相当好的解释;但是要小心,这条评论暗示着一种重复。链接线程中的答案将破坏对模式的任何理解。

票数 2
EN

Stack Overflow用户

发布于 2016-03-14 14:49:44

抽象工厂不必是抽象类,大多数情况下它只是一个接口。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35987934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档