特别是在Java中,单身人士的用途是什么?似乎只需使用静态方法和变量就可以完成单例的任何操作。有什么我想念的东西。许多用户认为延迟加载是一个原因,但看起来这并不是Java的好处。
我能想到的唯一好处是,通过在新类中重写的实现可以增强实现,这在getInstance()方法中被替换。
更新/修改
Singleton优于静态的优势在于前者更为客观 导向比以后。使用Singleton,您可以使用继承和 多态性扩展基类,实现接口和 提供不同的实现。
(看起来这是一种获得类似于覆盖Java中静态方法的结果的方法。)
还有其他优点吗?
答案 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,您可以使用继承和 多态性扩展基类,实现接口和 提供不同的实现
我同意。
还有其他优点吗?
将其用作对象。例如,您不能将静态类作为参数传递给参数。