一、概述
单例模式是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这种模式在很多情况下非常有用,例如在需要共享资源、控制资源访问或者确保某个类在整个应用程序中只有一个实例的场景中。
二、静态内部类实现
public class SingleTon{
private SingleTon(){}
private static class SingleTonHoler{
private static SingleTon INSTANCE = new SingleTon();
}
public static SingleTon getInstance(){
return SingleTonHoler.INSTANCE;
}
}
-
私有的构造函数,用于防止其他类通过
new关键字创建SingleTon类的实例。通过将构造函数私有化,外部类无法直接实例化SingleTon类,从而保证了单例的唯一性。 -
定义了一个私有静态内部类
SingleTonHoler。在这个内部类中,声明了一个静态常量INSTANCE,并将其初始化为SingleTon类的一个实例。 -
由于静态内部类的特性,即当外部类SingleTon第一次被加载时,并不需要去加载内部类SingleTonHoler,只有当getInstance()方法第一次被调用时,才会去初始化INSTANCE,第一次调用getInstance()方法会导致虚拟机加载内部SingleTonHoler类,这种方法不仅能确保线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化。
-
static修饰的变量,无论创建多少实例,只占一份内存,所以相当于无论调用多少次只有一份实例。