java設(shè)計模式之單例模式

什么是單例模式?

類的一個對象成為整個系統(tǒng)中的唯一實例。

特點:

? ? ? ?1、單例類只能有一個實例。

? ? ? ?2、單例類必須自己創(chuàng)建自己的唯一實例。

? ? ? ?3、單例類必須給所有其他對象提供這一實例。

例:

一、懶漢式單例

publicclassSingleton {

private ?static ?class ?LazyHolder?{

private ?static ?final ?Singleton?instance =new Singleton();

}

privateSingleton?(){}

public static final Singleton?getInstance()?{

return LazyHolder.instance;

}

}

Singleton通過將構(gòu)造方法限定為private避免了類在外部被實例化,在同一個虛擬機范圍內(nèi),Singleton的唯一實例只能通過getInstance()方法訪問。

二、餓漢式單例

//餓漢式單例類.在類初始化時,已經(jīng)自行實例化

publicclassSingleton {

privateSingleton()?{}

private ?staticfinal Singleton single?=new Singleton();

//靜態(tài)工廠方法

publicstaticSingleton1?getInstance()?{

returnsingle;

}

}

餓漢式在類創(chuàng)建的同時就已經(jīng)創(chuàng)建好一個靜態(tài)的對象供系統(tǒng)使用,以后不再改變,所以天生是線程安全的。(推薦新手使用,簡單粗暴)

什么時候使用單例模式?

需要頻繁實例化然后銷毀的對象。創(chuàng)建對象時耗時過多或者耗資源過多,但又經(jīng)常用到的對象。有狀態(tài)的工具類對象。頻繁訪問數(shù)據(jù)庫或文件的對象。

為什么要使用單例模式?

對于系統(tǒng)中的某些類來說,只有一個實例很重要,例如,一個系統(tǒng)中可以存在多個打印任務(wù),但是只能有一個正在工作的任務(wù);

定義一個全局變量可以確保對象隨時都可以被訪問,但不能防止我們實例化多個對象。一個更好的解決辦法是讓類自身負責(zé)保存它的唯一實例。這個類可以保證沒有其他實例被創(chuàng)建,并且它可以提供一個訪問該實例的方法。這就是單例模式的模式動機。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容