静态类和单例

时间:2009-04-06 09:16:37

标签: c++ design-patterns static singleton monostate

不是一个具有所有静态成员/方法的类是一种单例设计模式吗?有这样的课程有什么不利之处吗?详细解释会有所帮助。

5 个答案:

答案 0 :(得分:17)

这种类被称为monostate - 它与单身人士略有不同。

为什么要使用单独的而不是单身?在他们original paper的模式中,贝尔&克劳福德提出了三个推理(由我解释):

  • 更自然的访问语法
  • 单身人士缺少名字
  • 更容易从
  • 继承

我必须承认,我没有发现任何这些特别引人注目的。另一方面,monostate绝对不比单身人士更差

答案 1 :(得分:15)

罗伯特·C·马丁(Robert C. Martin)不久前曾写过article关于单态模式和单态模式之间差异的文章。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

  

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

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


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

引自wikipedia

  

在软件工程中,单身人士   模式是一种设计模式   用来限制a的实例化   类到一个对象。

根据这个定义,您的实现不是单例实现 - 您不使用共同的想法 一个(或多个扩展定义)类实例

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

答案 4 :(得分:0)

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