1

我正在通过下面的抽象工厂设计模式是那个UML图.. 在此处输入图像描述

请向我推荐这个模式的最佳示例,因为我已经尽力了,但我正在寻找易于学习的示例,并希望让我对抽象工厂模式的理解 100% 清晰。请告知

4

3 回答 3

6

您看过 JDK 中内置的 DocumentBuilderFactory 类吗?它正是这样做的,它的目标项是一个 Document 对象。

jdk 有 DocumentBuilderFactory 类,它使用服务定位器策略来查找 DocumentBuilderFactory 类的具体实现(即 xerces 或其他一些解析器)。

// Uses service locator approach to find an implementor like xerces
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(...);

java.awt.Toolkit 是另一个很好的例子。这一次,它使用 JVM 实现本身来提供实例:

Toolkit toolkit = Toolkit.getDefaultToolkit();

实际的具体类根据您使用的操作系统以及您是否在无头模式下运行而有所不同。

于 2012-08-13T17:21:05.070 回答
1

回想一下,工厂模式用于创建对象而不指定对象的确切类,从而减少了这两个组件之间的耦合。抽象工厂模式甚至通过定义一个所有工厂都必须实现的接口来减少解耦的数量。因此,抽象工厂的调用者对工厂的实现以及对象的创建方式一无所知。刚才的调用者,调用工厂的方法会产生接口 X 的某个对象实例。

Matt 的 XML 库示例实际上是一个很好的示例。抽象工厂是创建 XML 解析器的实体,它创建一个Document代表您解析的实际文档的对象。实际上,对于作为调用者的你来说,大多数时候使用哪个 Parser 完全无关紧要,只要你从中得到一个Document对象即可。因此,您可以简单地使用抽象工厂。这会为您创建一个有效的解析器(大多数时候;))

Toolkit 示例(也由 Matt 提到)是一个更像教科书的示例。想象一下,您只想在用户屏幕上填充一个窗口。由于您想以独立于平台的方式执行此操作,因此您定义了一个抽象类 Window ,您可以使用它来执行某些操作。然后你创建一个创建这些窗口的对象,比方说Win32WindowsFactory。但是,由于您的代码应该是独立于平台的,因此您定义了一个WindowsFactory为您提供方法的接口createWindow()。使用Win32WindowsFactoryWin32Window返回a LinuxGTKWindowsFactory,使用a时GTKWindow返回a。

于 2012-08-13T17:27:04.440 回答
0

它最常见的用例是依赖注入。您可以在其中一些线程中找到详细信息 什么是依赖注入?

于 2012-08-13T17:45:37.430 回答