1. 程式人生 > 其它 >JAVAJ單例模式的五種實現方式

JAVAJ單例模式的五種實現方式

//餓漢式
class Single1{
    private static final Single1 instance = new Single1();

    private Single1(){}

    public static Single1 getInstance() {
        return instance;
    }
}

//懶漢式(執行緒不安全)
class Single2{
    private static Single2 instance = null;

    private Single2(){}

    public static Single2 getInstance() {
        if(instance == null){
            instance = new Single2();
        }
        return instance;
    }
}

//懶漢式(加鎖)
class Single3{
    private static Single3 instance = null;

    private Single3(){}


    public static synchronized Single3 getInstance(){
        if(instance == null){
            instance = new Single3();
        }
        return instance;
    }
}

//懶漢式(雙重檢查)
class Single4{
    private static Single4 instance = null;

    private Single4(){}

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

//懶漢式(列舉實現)
enum Single5{
    INSTANCE();

    private String msg;

    private Single5(){
        System.out.println("單例初始化");
    }
}