单例模式的四种推荐方式
程序员文章站
2022-06-19 08:45:48
静态内部类的特点:1)当外部类Singleton进行类装载时,静态内部类是不会被装载的2)当调用Singleton的getInstance()方法,用到了静态变量INSTANCE时,静态类才会被装载,且只会装载一次。在装载时,线程是安全的。class Singleton{private Singleton() {}//写一个静态内部类,该类中有一个静态属性Singleton//jvm机在装载类的时候是线程安全的private static class SingletonInsta...
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(这种方法一般是静态方法)。
一、饿汉式
class Singleton{
//1.构造器私有化:外部不能new
private Singleton() {}
//2.在本类内部创建对象实例
private final static Singleton instance = new Singleton();
//3.对外提供一个公有的静态方法,返回实例对象
public static Singleton getInstance() {
return instance;
}
}
二、懒汉式
双重检查法
public class DoubleCheckInstance(){
private DoubleCheckInstance(){};
private static volatile DoubleCheckInstance instance;
public DoubleCheckInstance getInstance(){
if (instance != null) {
Synchronize(DoubleCheckInstance.class){
if (intance != null) {
intance = new DoubleCheckInstance();
}
}
}
}
}
三、静态内部类
静态内部类的特点:
1)当外部类Singleton进行类装载时,静态内部类是不会被装载的
2)当调用Singleton的getInstance()方法,用到了静态变量INSTANCE时,静态类才会被装载,且只会装载一次。在装载时,线程是安全的。
class Singleton{
private Singleton() {}
//写一个静态内部类,该类中有一个静态属性Singleton
//jvm机在装载类的时候是线程安全的
private static class SingletonInstance{
private static final Singleton INSTANCE = new Singleton7();
}
//提供一个静态的公有方法,直接返回Singleton7Instance.INSTANCE
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
四、枚举类
/**
* 推荐使用枚举实现单例模式,这是effective java 作者推荐的一种方式,很简洁。
*/
public enum SingletonEnumDemo {
INSTANCE;//属性(只有一个属性,就保证了是单例)
}
本文地址:https://blog.csdn.net/weixin_43221207/article/details/109909661