Java设计模式-单例

  • 2019-10-10
  • 467
  • 0
  • 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点

单例实现:

单例有多重实现方式,这里我只给出正确并且使用广泛的创建但是的方式

懒汉模式:用户在真正使用时,才回去创建实例对象

  • 双重校验锁(保证多线程安全):
public class Singleton {

/**
* 注意此处使用的关键字 volatile,
* 被volatile修饰的变量的值,将不会被本地线程缓存,
* 所有对该变量的读写都是直接操作共享内存,从而确保多个线程能正确的处理该变量。
*/
private volatile static Singleton singleton;

/**
* 创建私有的构造方法
*/
private Singleton() {
}

public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}

}
  • 静态内部类:内部类的好处就是当应用中不使用内部类时JVM就不会去加载这个单例类,也就不会创建单例对象,从而实现延迟加载和线程安全。
public class StaticSingleton {
    /**
     * 私有构造方法,禁止在其他类中创建实例
     */
    private StaticSingleton() {
    }

    /**
     * 一个私有的静态内部类,用于初始化一个静态final实例
     */
    private static class StaticSingletonHolder {
        private static final StaticSingleton instance = new StaticSingleton();
    }

    /**
     * 获取实例
     */
    public static StaticSingleton getInstance() {
        return StaticSingletonHolder.instance;
    }
}

饿汉模式:在类装载时创建对象实例

public class Singleton {

    private static Singleton singleton=new Singleton();

    /**
     * 创建私有的构造方法
     */
    private Singleton() {
    }

    public static Singleton getInstance() {
        return singleton;
    }

}
感谢打赏!
微信

评论

还没有任何评论,你来说两句吧