Java设计模式----单例设计模式

单例设计模式是java最为常用的一种模式,顾名思义:通过单例模式可以保证系统中一个类只有一个实例。一下主要介绍几种常见的单例设计模式。

懒汉式非线程安全:

public class Singleton{
    private Singleton(){};
    private static Singleton singleton = null;
    public static Singleton getSingleton() {
        if (singleton == null) {
            singleton = new Singleton();//用到时,才初始化。
        }
        return singleton;
    }
}

懒汉式线程安全

public class Singleton{
    private Singleton(){};
    private static Singleton singleton = null;
    public static synchronized Singleton getSingleton() {
        if (singleton == null) {
            singleton = new Singleton();//用到时,才初始化。
        }
        return singleton;
    }
}

饿汉式:

public class Singleton {  
     private static final Singleton instance = new Singleton();  //不管用不用,都初始化。
     private Singleton (){}
     public static Singleton getInstance() {  
     return instance;  
    }  
 } 

双重校验锁:

public class Singleton {
    private volatile static Singleton instance; //声明成 volatile
    private Singleton (){}

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

}

静态内部类 static nested class:

public class Singleton {  
    private static class SingletonHolder {  
        private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
        return SingletonHolder.INSTANCE; 
    }  
}

这种写法仍然使用JVM本身机制保证了线程安全问题;由于 SingletonHolder 是私有的,除了 getInstance() 之外没有办法访问它,因此它是懒汉式的;同时读取实例的时候不会进行同步,没有性能缺陷;也不依赖 JDK 版本。

你可能感兴趣的:(JAVA设计模式)