什么是单例模式
单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。
单例模式有 3 个特点
- 单例类只有一个实例对象;
- 该单例对象必须由单例类自行创建;
- 单例类对外提供一个访问该单例的全局访问点;
单例模式的类型
单例模式有两种类型:
- 懒汉式:在真正需要使用对象时才去创建该单例类对象
- 饿汉式:在类加载时已经创建好该单例对象,等待被程序使用
饿汉式单例模式
饿汉模式是指在类加载时就创建对象实例。在这种模式下,单例对象的实例在类加载时就被创建好,保证了在任何时候都能访问到这个实例。
饿汉模式的关键点是使用一个私有的静态成员变量来保存单例实例,并在类加载时就进行实例化。优点是简单直接,线程安全,不需要考虑多线程环境下的同步问题;
缺点是不能延迟加载,如果单例对象初始化比较复杂,可能会造成性能问题。
饿汉模式的实现代码
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
饱汉模式(懒汉模式)单例模式
饱汉模式是指在需要使用实例时才去创建对象。
在这种模式下,单例对象的实例不会在开始就创建,而是在第一次使用时才进行初始化。饱汉模式的关键点是使用一个静态方法或者静态代码块来实现实例的延迟加载。
优点是实例的创建是懒加载的,节省了资源;
缺点是在多线程环境下需要考虑线程安全性,需要加锁或使用双重检查锁来确保只有一个实例被创建。
饱汉模式的实现代码
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}