可能重复:
Difference between static class and singleton pattern?
为什么一个人只需要一个实例?使用具有静态成员变量和静态方法的类可以实现相同的目的。
据我所知,可能有两种可能的答案 -
当你的类需要有状态而你只想要一个对象时。从设计的角度来看,类与静态方法&变量被认为是公用事业类,不应该保持任何状态。
如果你的类需要参与多态,并且你只想要一个继承树中的类的一个对象。
如果有人可以提供现实场景或Singleton对象需要参与多态/继承的任何Java API的示例,那将会非常有用吗?
答案 0 :(得分:2)
Collections.emptySet()是单例的典型示例,无法实现为静态类,因为显然,它的目标是成为java.util.Set
接口的实例。创建成本并不高,但每次需要空集时创建一个新实例都是愚蠢的,因为可以重用唯一的实例。
答案 1 :(得分:1)
执行日志记录或对数据库的公共访问的类经常遵循Singleton模式。基本上任何应该具有实例方法并且构造成本高昂的东西。
答案 2 :(得分:0)
我的答案很短,但足以使用完全相同的单例而不是静态实现。答案是:
答案 3 :(得分:0)
范围和行为是不同的关注点,不应混合使用。您可能希望每个用户,每个线程,每个Web请求,每个会话或全局(Singleton)都可以使用您的对象。进行这些调整的原因可能是由于资源管理和最终的绩效。如果更改其范围,则不必更改类中的行为。
Singleton是一种模式,用于获取常规对象并通过一些螺栓连接代码控制其范围。理想情况下,您实际上不应该真正处理对象中的范围并将其委托给工厂或容器。