工厂方法的命名约定是什么?

11

介绍

MacApp Macintosh应用程序框架[App89]总是声明定义工厂方法的抽象操作为Class * DoMakeClass(),其中Class是产品类。

这句引用引发了我对工厂方法设计模式命名约定的疑问。

期望

我希望看到最佳实践或有用的示例,提供清晰的工厂方法命名。

由于它可能取决于语言,让我们考虑一组最受欢迎的语言:C#、Java、C ++和JavaScript。

上下文

作为一个上下文,我建议考虑以下类结构。我们有两个抽象类:Document和Application。应用程序包含文档列表,并且应该能够创建新文档。应用程序具有工厂方法CreateDocument()

enter image description here

感谢


1
惯例(如果有的话)可能取决于编程语言... - assylias
我对C#,C ++和JavaScript很感兴趣。我试图找到有关命名约定的任何信息,但只在我的问题中提到了一个(关于MacApp)。 - Warlock
2个回答

8

个人认为,方法名称取决于上下文和所创建对象的性质。这也许是你没有找到任何明确约定的原因。例如,在某些情况下,Create()方法可能是正确的选择,而在其他情况下,Open()Build()可能更合适。


我同意并点赞这个观点。上下文是王者,这句话引自《应用领域驱动设计》。 - Ibrahim Najjar
1
命名规范是一种存在或不存在的事情。它不应该依赖于上下文或编程语言。 - Warlock
1
我不明白。为什么需要命名规范?CreateDocument()看起来是一个命名良好、自我说明的工厂方法。 - David Osborne
4
实际上我并不需要这个约定,因为我已经成功地在没有它的情况下生活 :) 我只是想知道是否存在命名约定。但是作为回应,我只看到了关于上下文、语言等方面的问题……我希望看到最佳实践或有用的例子。现在我相信,与这种设计模式相关的约定并不强烈。最佳实践应该是在某些没有嵌入虚拟或抽象方法的语言中(例如javascript),使用“Do”或“Make”前缀来标记工厂方法。我认为我的问题应该重新表述以变得更加清晰 :) - Warlock

1

对于这个设计模式,没有强制的惯例。在一些没有内置虚拟或抽象方法(比如Javascript)的语言中,最佳实践是使用“Do”或“Make”前缀来标记工厂方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接