何时在类名中包含设计模式名称?

时间:2009-03-23 09:32:56

标签: design-patterns

在我的上一个项目中,我注意到,在类名中包含设计模式名称非常方便。例如:

  • ContextLazyFactory
  • RunOnceMediator
  • ThirdPartyMediator
  • MyProjectCliFacade
  • BinaryGate

它使项目易于阅读。另外一个好处是您不会使用自己的名称,如“RunOnceManager”,“ContextDelayedConstruction”,“ThirdPartyInterface”等,这些名称可能仅对作者有明显的意义。另一方面,我不希望在STL中看到像vector_container这样的类。你觉得怎么样?

我对此主题的当前观点是:作为类层次结构中重要节点的类应在其名称中具有其设计模式,以强调层次结构并使项目更易于阅读。

7 个答案:

答案 0 :(得分:22)

在很多情况下,我似乎很自然:

  • 设计模式的命名是为了解释它们的作用
  • 命名类以解释它们的作用

当解释类的目的的最简单方法是设计模式术语时,为什么不使用它呢?

另一方面,当设计模式主要是偶然时,则排除它。例如,一个类可能恰好是一个单例,但这不是它在生活中的主要目的,所以我不希望在名称中看到“Singleton”。相比之下,工厂的主要目的是成为其他物品的工厂 - “FooFactory”非常有意义。

答案 1 :(得分:1)

我认为在名称中使用设计模式是一个伟大的想法。例如,在我的一个游戏中,我有:

GameLevelAbstract
InGameArea
MainMenu

后两个类(InGameArea和MainMenu)是GameLevelAbstract的子类,并实现了它的纯虚方法。我可以在源代码视图中看到该类是抽象的,并立即知道它是或者不是我正在寻找的。

另一个例子是我的图形外观:

GraphicsFacade
OpenGLGraphics
DirectXGraphics

与上面的设置完全相同,只是它处理图形。

我发现在寻找课程时,使用名称中的设计模式是有用的和有用的。我确实不会在名称中使用某些东西,例如Singleton,但Flyweight,Factory或Facade是我认为适合实现这些模式的类名称的设计名称的示例。

我认为如果你使用好的课程名称来帮助程序员一目了然地掌握你的课程一目了然是一件好事。

在大多数情况下,我不认为说某事是数据结构或算法是好事。 “LinkedListDataStructure”或“BubbleSortAlgorithm”不会为程序员对类的理解添加任何内容,因为“LinkedList”在其功能中很明显。

答案 2 :(得分:0)

我同意你的看法。我要添加的唯一内容(实际上不言而喻)是确保类名中的模式名称确实使用了实际使用的模式。

我曾经看过一个名为XxxxFactory的类(或类似的东西),它与工厂模式没有任何相似之处!

答案 3 :(得分:0)

我还在类名中使用了设计模式名称,以提高其他人的可读性和易懂性。

向量对我来说意味着已经是一个集合,所以不需要_collection。 Btw容器不是设计模式。

答案 4 :(得分:0)

如果结果名称足够清晰,请继续使用它。

但是可能存在这样的情况:由此产生的名称要么笨拙,要么含糊不清。在这种情况下,请使用最合适的名称。

答案 5 :(得分:0)

至少有一个缺点:如果由于某种原因,类在重构后没有使用该模式,则必须重命名它或者使用名称错误的类。

答案 6 :(得分:0)

将设计模式名称添加为类名非常好。这使代码更容易理解。类名应该有意义,并且应该反映类的功能。当在类名中添加模式名称时,它会增加可读性,因为它还反映了用于设计类的技术。我更喜欢这种类名。