📅  最后修改于: 2023-12-03 15:32:02.754000             🧑  作者: Mango
单例模式是一种创建型设计模式,用于确保仅创建一个实例的类,并提供对该实例的全局访问点。
在Java中,单例模式是一种常见的设计模式,常常用于确保只有一个实例对象,并为其他对象提供访问该对象的通用接口。
使用单例模式可以解决以下问题:
在饿汉式单例中,对象在类加载时就被创建。
public class Singleton {
// 饿汉式单例,线程安全
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
在懒汉式单例中,对象在第一次被访问时才被创建,也称为惰性实例化。
public class Singleton {
// 懒汉式单例,非线程安全
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
双重检验锁(Double-Checked Lock,简称DCL)模式是一种更安全的单例模式,它的特点是在getInstance()方法中,先检查是否已经实例化,如果没有实例化才进入同步代码块,防止多个线程同时创建实例。
public class Singleton {
// 双重检验锁DCL,线程安全
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
单例模式常常用于以下场景:
由于单例模式可以提供全局单一实例的访问点,因此其他需要访问这些对象的类可以直接引用该单例,而无需每次新建一个实例。
单例模式是一个简单而有用的设计模式,它可以提供全局访问点,并确保只有一个实例对象。在Java中,可以使用饿汉式单例、懒汉式单例或双重检验锁DCL等方式来实现单例模式。虽然单例模式有一些争议,但它依然是一个非常实用的设计模式,可以在许多情况下为我们节省时间和资源。