1. 程式人生 > >Spring -11 -單例設計模式 -懶漢式/餓漢式(idea預設的)

Spring -11 -單例設計模式 -懶漢式/餓漢式(idea預設的)

單例設計模式

  1. 作用: 在應用程式有保證最多隻能有一個例項.
  2. 好處:

  2.1 提升執行效率.

  2.2 實現資料共享. 案例:application 物件

    1. 懶漢式

  3.1 物件只有被呼叫時才去建立.

  3.2  示例程式碼

       3.3由於添加了鎖,所以導致效率低.

public class lazySingleton {  //懶漢式,單例模式!
    //由於物件需要被靜態方法呼叫,把方法設定為static
    
//由於物件是static,必須要設定訪問許可權修飾符為private , //如果是public 可以直接呼叫物件,不執行訪問入口 private static lazySingleton ourInstance ; /** *方法名和類名相同,無返回值. *其他類不能例項化這個類物件;對外提供訪問入口 */ private lazySingleton() { } /** *例項方法,例項方法必須通過物件呼叫 *設定方法為靜態方法 *@return 一個上面的static 物件 */ public static
lazySingleton getInstance() { //新增邏輯如果例項化過,直接返回 if(ourInstance==null){ /* * 多執行緒訪問下,可能出現if 同時成立的情況,新增鎖; 監控這個類下建立一個鎖,每次只允許一個class進入; */ synchronized (lazySingleton.class){ if(ourInstance==null){ //雙重驗證 ourInstance =new
lazySingleton(); } } } return ourInstance; } }

3.4 測試

  

        lazySingleton singleton = lazySingleton.getInstance();
        lazySingleton singleton1 = lazySingleton.getInstance();
        System.out.println(singleton==singleton1);
        System.out.println(singleton);
        System.out.println(singleton1);

--------------------
true
[email protected]
[email protected]

 

4.餓漢式  (IDEA 編譯器預設的singleTon)
  解決了懶漢式中多執行緒訪問可能出現同一個物件和效率低問題 ,多個例項共用一個物件!

public class hungerSingleton {
    private static hungerSingleton ourInstance = new hungerSingleton();

    public static hungerSingleton getInstance() {
        return ourInstance;
    }

    private hungerSingleton() {
    }
}