單例模式

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