具有静态成员的Singleton v / s类& Java中的方法

时间:2012-10-07 15:31:12

标签: java design-patterns singleton

  

可能重复:
  Difference between static class and singleton pattern?

为什么一个人只需要一个实例?使用具有静态成员变量和静态方法的类可以实现相同的目的。

据我所知,可能有两种可能的答案 -

  1. 当你的类需要有状态而你只想要一个对象时。从设计的角度来看,类与静态方法&变量被认为是公用事业类,不应该保持任何状态。

  2. 如果你的类需要参与多态,并且你只想要一个继承树中的类的一个对象。

  3. 如果有人可以提供现实场景或Singleton对象需要参与多态/继承的任何Java API的示例,那将会非常有用吗?

4 个答案:

答案 0 :(得分:2)

Collections.emptySet()是单例的典型示例,无法实现为静态类,因为显然,它的目标是成为java.util.Set接口的实例。创建成本并不高,但每次需要空集时创建一个新实例都是愚蠢的,因为可以重用唯一的实例。

答案 1 :(得分:1)

执行日志记录或对数据库的公共访问的类经常遵循Singleton模式。基本上任何应该具有实例方法并且构造成本高昂的东西。

答案 2 :(得分:0)

我的答案很短,但足以使用完全相同的单例而不是静态实现。答案是:

  • 流行范例(是的!)
  • 主题(同步等)
  • 接口实现(您的静态类有一些限制)

答案 3 :(得分:0)

范围和行为是不同的关注点,不应混合使用。您可能希望每个用户,每个线程,每个Web请求,每个会话或全局(Singleton)都可以使用您的对象。进行这些调整的原因可能是由于资源管理和最终的绩效。如果更改其范围,则不必更改类中的行为。

Singleton是一种模式,用于获取常规对象并通过一些螺栓连接代码控制其范围。理想情况下,您实际上不应该真正处理对象中的范围并将其委托给工厂或容器。