Java設計模式——單例模式(static修飾)


1、類的構造器私有化

2、本類內部創建對象(用本類內部public static靜態方法返回該靜態對象)

3、創建靜態變量指向該類。

 

餓漢式和懶漢式的差異:

1、創建對象的時機不同!(餓漢模式在使用靜態類時創建加載對象;懶漢模式在靜態方法時加載創建對象)

2、應用場合不同

如果僅僅考慮效率問題,可以使用懶漢式

如果考慮線程安全問題,可以使用餓漢式(懶漢式容易出現數據錯亂問題)

 

/**
 * 此類用於演示單例設計模式
 * 步驟:
 * 1、構造器私有化
 * 2、本類內部創建對象
 * 3、提供public static方法,暴露該對象
 *
 * 餓漢式和懶漢式的差異:
 * 
 * 1、創建對象的時機不同!
 * 2、應用場合不同
 * 如果僅僅考慮效率問題,可以使用懶漢式
 * 如果考慮線程安全問題,可以使用餓漢式
 * 
 * 
 * 經典案例:Runtime類就使用了餓漢式單例設計模式
 * 
 * 【面試題】自己編寫懶漢式代碼!
 * 
 * 
 */
public class TestSingle {
    
    public static void main(String[] args) {
//        Single1 s = new Single1();
        
//        Single1 s1 = Single1.getInstance();
//        Single1 s2 = Single1.getInstance();
//        
//        System.out.println(s1==s2);//true
//        
//        Single2.rate=1000;
        Single2 s1 =Single2.getInstance();
        
        Single2 s2 = Single2.getInstance();
        
        System.out.println(s1==s2);
        
    }

}

//方式二:懶漢式


class Single2{
    
    public static int rate;
    //1、構造器私有化
    private Single2(){}
        
    //2、本類內部創建對象 ★
        
    private static Single2 s ;
        
    //3、提供public static方法,暴露該對象
    
    public static Single2 getInstance(){
        if(s==null)
            s=new Single2();
        return s;
    }
    
    
}
//方式一:餓漢式

class Single1{
    
    public static int rate=100;
    //1、構造器私有化
    private Single1(){}
    
    //2、本類內部創建對象
    
    private static Single1 s = new Single1();
    
    //3、提供public static方法,暴露該對象
    public static Single1 getInstance(){
        return s;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM