当前位置: 首页 > 知识库问答 >
问题:

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

周鸿光
2023-03-14

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

  1. 抽象基地工厂
  2. 混凝土工厂每个延伸抽象基地工厂
  3. 客户端代码
  4. 基础产品
  5. 扩展基础产品的具体产品类别

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

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

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

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

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

如果我们有代码来创建具体工厂类的对象,而不是在这些对象上调用getProduct方法的代码。实例化具体工厂类的代码可以将工厂放在一些队列中,以后的队列可以迭代,可以获得具体产品

请提供您宝贵的反馈。

共有2个答案

公冶谦
2023-03-14

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

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

农存
2023-03-14

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

那些认为抽象工厂模式的目的是生产具体工厂的答案是完全错误的。不幸的是,这种错误的信息具有欺骗性的直观性,因此错误的定义在如此多的网站上肆虐,许多网站拥有数百张选票。

这里的答案很好地解释了AbstractFactory;但要小心那些暗示重复的评论。链接线程中的答案会破坏对模式的任何理解。

 类似资料:
  • 抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

  • 主要内容:介绍,实现,Shape.java,Rectangle.java,Square.java,Circle.java,Color.java,Red.java,Green.java,Blue.java,AbstractFactory.java,ShapeFactory.java,ColorFactory.java,FactoryProducer.java,AbstractFactoryPatternDemo.java抽象工厂模式(Abstract Factory Pattern)是围绕一个超级

  • 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要

  • 简介 抽象工厂模式是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。 简例 有个

  • 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 主要

  • 抽象工厂模式 前面我们写过的工厂模式实际上是对产品的抽象。对于不同的用户需求,我们可以给予不同的产品,而且这些产品的接口都是一致的。而抽象工厂呢?顾名思义,就是说我们的工厂是不一定的。怎么理解呢,举个例子。 假设有两个水果店都在卖水果,都卖苹果和葡萄。其中一个水果店买白苹果和白葡萄,另外一个水果店卖红苹果和红葡萄。所以说,对于水果店而言,尽管都在卖水果,但是两个店卖的品种不一样。 既然水果不一样,