荣耀的全球变量 - 成为一个荣耀的全球阶级。 有人说打破面向对象的设计。 数据库
给我一些场景,除了好的旧记录器,使用单例是有意义的。 服务器
1 - 对第一个答案的评论: 框架
我不一样意静态Logger类。 这对于实现来讲是实用的,但它不能替代单元测试。 静态类不能被测试double替换。 若是你没有单元测试,你不会在这里看到问题。 函数
2 - 我尽可能不用手工制做单身人士。 我只是建立一个带有构造函数的简单对象,容许我将协做者注入到对象中。 若是我须要一个单例,我会使用依赖的inyection框架(Spring.NET,Unity for .NET,Spring for Java)或其余。 单元测试
当您从数据库或文件加载配置属性对象时,它有助于将其做为单例; 没有理由继续从新读取服务器运行时不会改变的静态数据。 测试
在实现State模式时能够使用Singleton(以GoF书中显示的方式)。 这是由于具体的State类没有本身的状态,并根据上下文类执行它们的操做。 spa
您还能够将Abstract Factory设为单例。 设计
管理数据库的链接(或链接池)。 对象
我还会用它来检索和存储外部配置文件的信息。 资源
您须要管理共享资源时使用单例。 例如打印机假脱机程序。 您的应用程序应该只有一个假脱机程序实例,以免对同一资源的请求冲突。
或者数据库链接或文件管理器等。