我正在经历抽象工厂设计模式,下面是该模式的UML图。

请推荐给我最好的例子,因为我已经尽了最大的努力,但我正在寻找的例子,是易于学习,并希望使我的抽象工厂模式100% clear.Please建议
发布于 2012-08-14 01:21:05
您看过内置到JDK中的DocumentBuilderFactory类吗?它正是这样做的,它的目标项是一个文档对象。
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-14 01:27:04
回想一下,Factory模式用于创建对象,而不指定对象的确切类,从而减少了这两个组件之间的耦合。抽象工厂模式甚至通过定义所有工厂都必须实现的接口来减少解耦的数量。因此,抽象工厂的调用者不知道工厂的实现以及对象是如何创建的。调用者刚才,调用工厂上的一个方法将产生接口X的某个对象实例。
Matt的XML库示例实际上是一个很好的示例。抽象工厂是创建XML解析器的实体,解析器创建一个Document对象来表示您解析的实际文档。实际上,对于调用者来说,使用哪个解析器在大多数情况下是完全无关的,只要从中获得一个Document对象即可。因此,您可以简单地使用抽象工厂。它为您创建了一个有效的解析器(大多数情况下;)
Toolkit示例(Matt也提到了)是一个更像教科书的示例。想象一下,您只想填充用户屏幕上的一个窗口。当你想以一种独立于平台的方式来做这件事时,你可以定义一个抽象的类窗口,你可以用它来做某些操作。然后你创建一个对象来创建这些窗口,比如说Win32WindowsFactory。然而,由于您的代码应该是独立于平台的,因此您需要定义一个提供方法createWindow()的接口WindowsFactory。使用Win32WindowsFactory时,返回Win32Window;使用LinuxGTKWindowsFactory时,返回GTKWindow。
发布于 2012-08-14 01:45:37
它最常见的用例是依赖注入。您可以在其中一些线程What is dependency injection?中找到详细信息
https://stackoverflow.com/questions/11939025
复制相似问题