作用:在應用程式中保證最多有一個例項。
好處:
提升執行效率。
實現資料共享。案例:application物件的有效範圍
懶漢式
面試時一般能手寫
例子:
把構造方法私有化。
其他類不能例項化這個物件。
程式碼:package com.wq;public class SingoTon { //由於物件需要靜態方法呼叫,把方法設定為static //由於物件是static,必須設定訪問許可權修飾符為private,如果是public 可以直接呼叫物件,不執行訪問入口 private static SingoTon singoTon; /** * 構造方法 * 方法名和類名相同 * 無返回值 * * * 其他類不能例項化 */ private SingoTon(){ } /** * 例項方法 * 例項方法必須透過物件呼叫 * * * 設定方法為靜態方法 * * * 多執行緒訪問下 * @return */ public static SingoTon getInstance() { //新增邏輯,如果例項化過,直接返回 if (singoTon==null) { /* * 多執行緒情況下,可能出現if同時成立的情況,新增鎖 */ synchronized (SingoTon.class) { //雙重驗證 if (singoTon==null) { singoTon=new SingoTon(); } } } return singoTon;}}
測試類:
package com.wq.test;import com.wq.SingoTon;public class Test { public static void main(String[] args) { SingoTon singoTon =SingoTon.getInstance(); SingoTon singoTon1 =SingoTon.getInstance(); //如果為ture則為單例 System.out.println(singoTon==singoTon1);}}
結果:
為什麼叫懶漢式
物件只有被呼叫時才會去建立
餓漢式由於添加了鎖
導致多執行緒等待---效率會低
使用餓漢式
解決了懶漢式中多執行緒訪問可能出現同一個物件和效率低問題
package com.wq;public class SingoTon { //在類載入時會被例項化private static SingoTon singoTon=new SingoTon(); private SingoTon(){} public static SingoTon getInstance() { return singoTon;}}
package com.wq.test;import com.wq.SingoTon;public class Test { public static void main(String[] args) { SingoTon singoTon =SingoTon.getInstance(); SingoTon singoTon1 =SingoTon.getInstance(); //如果為ture則為單例 System.out.println(singoTon==singoTon1);}}
當你選一種就可以
最新評論