您的特定用例将影响您可能选择的(如果有的话)。但是要从本质上重申您引用的链接上的内容:
抽象工厂和工厂方法都在创建未知类型的实例。通常,这些将返回与接口对应的类,但您不知道(也不应该关心)具体类型是什么。要使用该链接中的图片,它使用的是 WindowsFactory,这意味着抽象工厂正在返回一个与 Windows 兼容的实例。如果你的工厂是一个 LinuxFactory,你可能会得到一个在 Linux 上工作的对象。另请注意,您可能不知道您是否拥有 LinuxFactory 或 WindowsFactory,只是您拥有特定类型的 Factory。
因此,抽象工厂和工厂方法模式是关于构建多态类型(包括当您不知道或不关心具体类型是什么时)。但是,获取该类型实例的调用通常是微不足道的。要从工厂构建,您可能只是调用:
MyInterfaceType myInstance = myFactory.getTheItemOfMyInterfaceType();
构建器模式更多地是关于构建可能是或可能不是(但可能是)已知类型的复杂对象。在这种情况下,您会期望一系列复杂的调用来构造类型,通常会一个接一个地设置参数。因为有很多已知的参数和参数,所以您通常知道要从中返回什么类型的对象(不必知道,但它比抽象工厂更有可能)。Builder 用于构造对象复杂但不一定是多态的(它可能是多态的,但这不是模式的前提)。构建某些东西的构建器调用可能是(有关一些真实示例,请参见 Android AlertDialog):
Builder b = new Builder();
b.setSomeValueA(myChoiceForA);
b.setSomeValueB(myChoiceForB);
MyInterfaceType myInstance = b.build();
希望有帮助。