單例模式
公司主營業(yè)務:成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出靖西免費做網(wǎng)站回饋大家。
一個類只有一個實例,并且可以全局訪問使用
應用場景
如賬戶管理類,數(shù)據(jù)庫操作類等(某個對象頻繁被訪問使用)
常用方式
餓漢式
懶漢式
同步加鎖
DCL雙重加鎖驗證
靜態(tài)內(nèi)部類
枚舉單例
餓漢式
加載類的同時立即進行初始化操作,對資源消耗很大
public class SingleTest { public static final SingleTest singleTest1=new SingleTest(); public SingleTest() { } public static SingleTest getSingleTest1(){ return singleTest1; } }
懶漢式
優(yōu)點:需要使用時候才進行初始化加載
缺點:線程不安全,在多線程中很容易出現(xiàn)不同步的情況
public class SingleTest1 { private static SingleTest1 instance=null; public SingleTest1() { } public static SingleTest1 getInstance(){ if(instance==null){ instance=new SingleTest1(); } return instance; } }
同步加鎖
優(yōu)點:解決線程安全問題
缺點:每次實例需要判斷加鎖狀態(tài),效率低下
public class SingleTest2 { private static SingleTest2 instance=null; public SingleTest2() { } public static synchronized SingleTest2 getInstance(){ if(instance==null){ instance=new SingleTest2(); } return instance; } }
DCL雙重校驗
優(yōu)點:并發(fā)不高的情況下可以完美運行(推薦使用,客戶端幾乎不存在高并發(fā)情況)
缺點:JDK1.5以前可能會出現(xiàn)instance為初始化的問題(現(xiàn)在的Android幾乎都是1.7 1.8了幾乎可以略率此問題)
public class SingleTest4 { private static SingleTest4 instance=null;//靜態(tài)變量 public SingleTest4() { } public static SingleTest4 getInstance(){ if (instance == null) {//第一層校驗 synchronized (SingleTest4.class) { if (instance == null) {//第二層校驗 instance = new SingleTest4(); } } } return instance; } }
靜態(tài)內(nèi)部類
優(yōu)點:延遲加載,線程安全,內(nèi)存消耗少(推薦使用)
public class SingleTest5 { private SingleTest5() { } public static final SingleTest5 getInstance() { return SingletonHolder.INSTANCE; } //定義的靜態(tài)內(nèi)部類 private static class SingletonHolder { private static final SingleTest5 INSTANCE = new SingleTest5(); //創(chuàng)建實例的地方 } }
枚舉單例
優(yōu)點:線程安全,防反序列化,防反射,寫法簡單
public enum SingleTest6 { //第一種方式 // INSTANCE; // private CaiPiao instance; // // SingleTest6() { // instance = new CaiPiao(); // } // // public CaiPiao getInstance() { // return instance; // } // // class CaiPiao { // // } //第二種方式 INSTANCE2{ @Override protected void CaiPiao() { System.out.println("彩票"); } }; protected abstract void CaiPiao(); }
github代碼地址
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)頁題目:Android設計模式之單例模式詳解
當前路徑:http://www.rwnh.cn/article36/pgcdsg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、商城網(wǎng)站、動態(tài)網(wǎng)站、網(wǎng)站維護、網(wǎng)站內(nèi)鏈、App設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)