15

只有静态成员的类不是一种单例设计模式吗?上这样的课有什么缺点吗?详细的解释会有所帮助。

4

5 回答 5

18

这种类被称为单态——它与单态有些不同。

为什么使用单态而不是单态?在他们关于模式的原始论文中,Bell & Crawford 提出了三个原因(由我解释):

  • 更自然的访问语法
  • 单身人士没有名字
  • 更容易继承

我必须承认,我没有发现其中任何一个特别引人注目。另一方面,单态绝对不比单态差。

于 2009-04-06T09:30:06.560 回答
15

Robert C. Martin前段时间写过一篇关于单态模式和单例模式的区别的文章。

于 2009-04-06T09:21:16.333 回答
2

考虑一系列 Logging 类。它们都实现了“LogMessage(message, file, line_number)。一些向标准错误发送消息,一些向一组开发人员发送电子邮件,一些增加消息频率表中特定消息的计数,一些路由到 /dev/null . 在运行时,程序检查它的参数向量、注册表或环境变量,以使用哪些日志记录技术,并使用来自合适类的对象实例化日志记录单例,可能会加载最终用户提供的 DLL 来执行此操作。用纯静态单例很难复制。

于 2009-04-06T12:35:21.250 回答
1

对于单例,所有构造函数都必须是私有的,因此您只能通过函数访问。但你已经很接近它了。

于 2009-04-06T09:34:15.583 回答
1

具有所有静态成员/方法的类一种单例设计模式

类 - 不是模式。当我们谈论类时,我们可以说类实现了模式。


静态函数 - 不是成员函数,它们与全局函数相似。也许你不需要任何课程?

引用自维基百科

在软件工程中,单例模式是一种设计模式,用于将类的实例化限制为一个对象。

根据这个定义,您的实现不是单例实现 - 您不使用常见的想法一个(或扩展定义中的几个)实例 class

但有时(并非总是)使用所有静态函数和单例模式的类 - 没有有意义的区别。

于 2009-04-06T10:04:30.580 回答