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