單例模式,顧名思義,用來保證乙個物件只能建立乙個例項,除此之外,它還提供了對例項的全域性訪問方法。
單例模式的實現非常簡單,只由單個類組成。為確保單例例項的唯一性,所有的單例構造器都要被宣告為私有的(private),在通過靜態方法實現全域性訪問該單例例項。
public
class
singleton
public
static
singleton
getinstance()
return instance;
}public
void
dosomething()
}
在多執行緒中使用上述模式,如果例項為空,可能存在兩個執行緒同時呼叫getinstance方法的情況。如果發生這種情況,第乙個執行緒會首先使用新構造器例項化單例物件,同時第二個執行緒也會檢查單例例項是否為空,由於第乙個執行緒還沒有完成單例物件的例項化操作,所以第二個執行緒會發現這個例項是空的,也會開始例項化單例物件。如下**是為了解決這個問題而引入的,通過synchronized關鍵字來保證其執行緒安全。
public
class
singleton2
public
static
singleton2
getinstance()
return instance;}}
public
void
dosomething()
}
上述**中,用來檢查例項是否被建立的**是執行緒同步的,也就是說此**塊在同一時刻,只能被乙個執行緒執行,但是同步鎖只有在例項沒有被建立的情況下才起作用。如果例項已經建立了,那麼任何執行緒都能通過非同步的方式獲取當前例項。
public
class
singleton3
public
static
singleton3
getinstance()
}}return instance;
}public
void
dosomething()
}
通過在宣告時直接例項化靜態成員的方式來保證乙個類只有乙個例項。這種實現方式避免了使用同步鎖機制和判斷例項是否被建立的額外檢查。
public
class
singleton4
public
static
synchronized
singleton4
getinstance()
public
void
dosomething()
}
設計模式之建立型模式 單例模式
在單例模式下,乙個類負責建立自己的例項,且這個類只能建立乙個唯一的例項物件,外部可以直接訪問這個例項物件,單例模式常用於物件的建立。建立單例模式時,建構函式是私有的這樣才能保障,在外部無法建立類例項化物件。單列模式的優點 1 保證在記憶體中只有乙個當前類的例項化物件,減小記憶體的開銷 2 避免資源的...
設計模式之建立型模式 單例模式
單例模式,顧名思義就是只存在乙個類的例項,避免多例項造成的記憶體浪費。public class singletonpattern private static singletonpattern singleton new singletonpattern public static singleto...
設計模式之單例模式 建立型模式
簡介 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,任務管理器 執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。在專案當中,系統啟動讀取配置檔案就需要單例保證配置的一致性。要點與實現要點 實現實現單例模式方式 餓漢式 餓漢式單...