首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建器与工厂方法模式

构建器与工厂方法模式
EN

Stack Overflow用户
提问于 2014-02-01 11:44:42
回答 1查看 3.6K关注 0票数 0

我正在读关于Builder pattern的文章,像往常一样,我对Factory pattern感到困惑。

我看过一篇很好的文章,它展示了抽象工厂和构建器模式之间的区别。

http://champika-nirosh.blogspot.in/2008/04/what-is-difference-between-abstract.html

但我的困惑是,除了生成器模式类似于抽象工厂之外,我觉得它更类似于工厂方法模式。我不确定我的理解是正确的。但是在Factory方法中,我们也使用了一个单独的工厂(混凝土工厂中的方法)来创建一个特定的对象(而不是一个产品系列)。在该场景中,Builder与Factory Method模式有何不同。我知道Builder需要更多的步骤来创建对象,除此之外,我们还需要使用什么特殊的场景吗?请给我引路。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-02-01 12:29:06

您的特定用例将影响您可能选择的(如果有)。但要从本质上重申你引用的链接上的内容:

抽象工厂和工厂方法都在创建未知类型的实例。通常,这些函数会返回一个对应于接口的类,但是您不知道(也不应该关心)具体的类型是什么。为了使用该链接中的图片,它使用了一个WindowsFactory,这意味着抽象工厂将返回一个与Windows兼容的实例。如果您的工厂是一个LinuxFactory,那么您可能会得到一个可以在Linux上工作的对象。还要注意,您可能不知道您是否有一个LinuxFactory或WindowsFactory,只知道您有一个特定类型的工厂。

因此,抽象工厂和工厂方法模式是关于构建多态类型的(包括当您不知道或不关心具体类型是什么时)。但是,获取该类型的实例的调用通常很简单。要从工厂构建,您可能只需调用:

代码语言:javascript
复制
MyInterfaceType myInstance = myFactory.getTheItemOfMyInterfaceType();

构建器模式更多地是关于构建复杂的对象,这些对象可能是也可能不是(但可能是)已知类型。在这种情况下,您可能需要一系列复杂的调用来构造类型,通常会一个接一个地设置参数。因为有许多已知的参数和参数,所以您通常知道将从其中返回什么类型的对象(不必如此,但它比抽象工厂更有可能)。Builder用于构造复杂的对象,但不一定是多态的(它可能是多态的,但这不是模式的前提)。一个构建器调用来构造一些东西可能是(参见Android AlertDialog中的一些真实示例):

代码语言:javascript
复制
Builder b = new Builder();
b.setSomeValueA(myChoiceForA);
b.setSomeValueB(myChoiceForB);
MyInterfaceType myInstance = b.build();

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21493851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档