Java单例用法

时间:2014-06-22 12:05:03

标签: java singleton static-methods factory

特别是在Java中,单身人士的用途是什么?似乎只需使用静态方法和变量就可以完成单例的任何操作。有什么我想念的东西。许多用户认为延迟加载是一个原因,但看起来这并不是Java的好处。

我能想到的唯一好处是,通过在新类中重写的实现可以增强实现,这在getInstance()方法中被替换。

更新/修改

  

Singleton优于静态的优势在于前者更为客观   导向比以后。使用Singleton,您可以使用继承和   多态性扩展基类,实现接口和   提供不同的实现。

(看起来这是一种获得类似于覆盖Java中静态方法的结果的方法。)

还有其他优点吗?

3 个答案:

答案 0 :(得分:3)

Singleton的目的是控制对象创建,仅限制一个obejcts的数量。由于只有一个Singleton实例,因此Singleton的任何实例字段每个类只会出现一次,就像静态字段一样。单身人士通常控制对资源的访问,例如数据库连接或套接字。

例如,如果您的数据库只有一个连接的许可证,或者您的JDBC驱动程序遇到多线程问题,则Singleton会确保只建立一个连接,或者一次只有一个线程可以访问该连接。

Singleton设计模式解决了所有这些问题。使用Singleton设计模式,您可以:

  • 确保只创建一个类的一个实例
  • 提供对象的全局访问权限
  • 将来允许多个实例而不会影响单例 班级的客户

有关详细信息,请阅读this,另请参阅

Difference between Singleton Pattern vs Static Class in Java

答案 1 :(得分:2)

模式上的wikipedia page表示几种常见用途:

Facade个对象通常是单例,因为只需要一个Facade对象。

State objects通常是单身人士(即全球国家)。

单身人士往往更喜欢全球变量,因为:

  • 它们不会使用不必要的变量污染全局命名空间(或者,在具有命名空间的语言中,包含其命名空间)。
  • 它们允许延迟分配和初始化,而许多语言中的全局变量将始终消耗资源。

Effective Java建议您使用单个值枚举创建单例,以防止创建多个实例。这也可以防止任何子类化。这确实有使测试更难的副作用。

使用单例的一个好处是控制并发访问变得更加容易,因为单例对象本身非常适合作为同步的锁定对象。

答案 2 :(得分:1)

  

Singleton优于静态的优势在于前者更为客观   导向比以后。使用Singleton,您可以使用继承和   多态性扩展基类,实现接口和   提供不同的实现

我同意。

  

还有其他优点吗?

将其用作对象。例如,您不能将静态类作为参数传递给参数。

相关问题