Spring -11 -單例設計模式 -懶漢式/餓漢式(idea預設的)
阿新 • • 發佈:2018-12-13
單例設計模式
- 作用: 在應用程式有保證最多隻能有一個例項.
- 好處:
2.1 提升執行效率.
2.2 實現資料共享. 案例:application 物件
-
- 懶漢式
3.1 物件只有被呼叫時才去建立.
3.2 示例程式碼
3.3由於添加了鎖,所以導致效率低.
public class lazySingleton { //懶漢式,單例模式! //由於物件需要被靜態方法呼叫,把方法設定為static//由於物件是static,必須要設定訪問許可權修飾符為private , //如果是public 可以直接呼叫物件,不執行訪問入口 private static lazySingleton ourInstance ; /** *方法名和類名相同,無返回值. *其他類不能例項化這個類物件;對外提供訪問入口 */ private lazySingleton() { } /** *例項方法,例項方法必須通過物件呼叫 *設定方法為靜態方法 *@return 一個上面的static 物件 */ public staticlazySingleton getInstance() { //新增邏輯如果例項化過,直接返回 if(ourInstance==null){ /* * 多執行緒訪問下,可能出現if 同時成立的情況,新增鎖; 監控這個類下建立一個鎖,每次只允許一個class進入; */ synchronized (lazySingleton.class){ if(ourInstance==null){ //雙重驗證 ourInstance =newlazySingleton(); } } } 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() { } }