Singleton(单例)模式用于确保某个类只有一个实例,并且为之提供一个全局访问点。
Singleton模式适用情况:
-
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
-
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时
在任何情况下,Singleton模式都建议我们提供能够访问单例对象的公有静态方法。如果使用这个方法创建一个对象,该方法将承担确保仅创建一个实例的责任。
Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作,可能负责创建它自己的唯一实例。
public class Singleton { private static Singleton sing; private Singleton() { } public static Singleton getInstance() { if (sing == null) { sing = new Singleton(); } return sing; } }
public class Test { public static void main(String[] args) { Singleton sing = Singleton.getInstance(); Singleton sing2 = Singleton.getInstance(); System.out.println(sing); System.out.println(sing2); } }
运行结果:
[email protected] [email protected]
一个常见的单例实现方案是对单例类进行滞后初始化,即仅在第一次使用的时候实例化单例对象。
在多线程环境下,如果有多个线程同时访问单例类的方法和数据,我们必须仔细协调调度这些线程的运行。
对象是唯一的,并不一定意味着就应该使用Singleton模式。通过隐藏构造器和提供对创建对象的单个访问点,Singleton模式能够将类的职责集中于类的某个单个实例中。
时间: 2024-10-19 22:49:01