Skip to end of metadata
Go to start of metadata

Abstract Factory Pattern提供了一种封装一组独立但有通用主题的工厂的方式。他体现了一个正常工厂的意图,即,不再需要使用一个知道其具体实现类的接口的代码,而应用于一组接口并选择实现这些接口的整个具体类家族。

我不妨以Button,TextField和Scrollbar接口作为例子。我以 WindowsButton, MacButton, FlashButton作为Button的具体类。以WindowsScrollBar, MacScrollBar and FlashScrollBar作为ScrollBar的具体实现。使用抽象工厂模式应该允许我选择一次我想要用哪一个窗口系统(例:Windows, Mac, Flash),之后,我只要在代码中引用接口就一直可以隐式的使用正确的具体类(都是同一个窗口系统的)。

例子

假定我们想要写一个游戏系统。我们可能注意到许多游戏都有类似的特性和控制。

我们决定尝试把通用代码和游戏特定代码分离到不同的类中。

首先让我们看看一个Two-up游戏的特定代码:

现在,让我们看看一个猜数字游戏的特定代码:

现在,让我们编写我们的工厂代码:

这个工厂最重要的方面是它允许选择整个具体类家族。

我们可能会如何使用工厂:

注意第一行设置了我们会用哪一个游戏具体类家族。像第一行那样用factory属性的方式来选择使用哪一个家族并不重要。其他方式同样也可以作为这个模式的例子。例如:我们或许可以问用户他们想要玩哪个游戏或从环境设定中决定哪个游戏。

通过给出的代码,游戏运行起来可能看上去像:

如果我们将脚本的第一行改为GameFactory.factory = guessFactory,那么例子运行起来看上去像:

  • No labels