這篇文章將為大家詳細(xì)講解有關(guān)java單例模式如何寫(xiě),小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司網(wǎng)站設(shè)計(jì),為客戶(hù)量身定制各類(lèi)網(wǎng)站建設(shè)業(yè)務(wù),包括企業(yè)型、電子商務(wù)型、響應(yīng)式網(wǎng)站設(shè)計(jì)、行業(yè)門(mén)戶(hù)型等各類(lèi)網(wǎng)站,實(shí)戰(zhàn)經(jīng)驗(yàn)豐富,成功案例眾多。以客戶(hù)利益為出發(fā)點(diǎn),成都創(chuàng)新互聯(lián)公司網(wǎng)站制作為客戶(hù)規(guī)劃、按需設(shè)計(jì)符合企業(yè)需求、帶有營(yíng)銷(xiāo)價(jià)值的網(wǎng)絡(luò)建站方案認(rèn)真對(duì)待每一個(gè)客戶(hù),我們不用口頭的語(yǔ)言來(lái)吹擂我們的優(yōu)秀,數(shù)千家的成功案例見(jiàn)證著我們的成長(zhǎng)。
單例模式(Singleton Pattern)是 Java 中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。
這種模式涉及到一個(gè)單一的類(lèi),該類(lèi)負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類(lèi)提供了一種訪問(wèn)其唯一的對(duì)象的方式,可以直接訪問(wèn),不需要實(shí)例化該類(lèi)的對(duì)象。
注意:
1、單例類(lèi)只能有一個(gè)實(shí)例。2、單例類(lèi)必須自己創(chuàng)建自己的唯一實(shí)例。3、單例類(lèi)必須給所有其他對(duì)象提供這一實(shí)例。
java 單例模式5種寫(xiě)法:
飽漢模式(懶漢模式)
// 飽漢
// UnThreadSafe
public class Singleton1 {
private static Singleton1 singleton = null;
private Singleton1() {
}
public static Singleton1 getInstance() {
if (singleton == null) {
singleton = new Singleton1();
}
return singleton;
}
}優(yōu)點(diǎn):懶加載啟動(dòng)快,資源占用小,使用時(shí)才實(shí)例化,無(wú)鎖。
缺點(diǎn):非線程安全。
飽漢模式(懶漢模式)--線程安全
public class Singleton {
/**
* 定義一個(gè)變量來(lái)存儲(chǔ)創(chuàng)建好的類(lèi)實(shí)例
*/
private static Singleton uniqueInstance = null;
/**
* 私有化構(gòu)造方法,好在內(nèi)部控制創(chuàng)建實(shí)例的數(shù)目
*/
private Singleton(){
}
/**
* 定義一個(gè)方法來(lái)為客戶(hù)端提供類(lèi)實(shí)例
* @return 一個(gè)Singleton的實(shí)例
*/
public static synchronized Singleton getInstance(){
//判斷存儲(chǔ)實(shí)例的變量是否有值
if(uniqueInstance == null){
//如果沒(méi)有,就創(chuàng)建一個(gè)類(lèi)實(shí)例,并把值賦值給存儲(chǔ)類(lèi)實(shí)例的變量
uniqueInstance = new Singleton();
}
//如果有值,那就直接使用
return uniqueInstance;
}
/**
* 示意方法,單例可以有自己的操作
*/
public void singletonOperation(){
//功能處理
}
/**
* 示意屬性,單例可以有自己的屬性
*/
private String singletonData;
/**
* 示意方法,讓外部通過(guò)這些方法來(lái)訪問(wèn)屬性的值
* @return 屬性的值
*/
public String getSingletonData(){
return singletonData;
}
}優(yōu)點(diǎn):同上,但加鎖了。
缺點(diǎn):synchronized 為獨(dú)占排他鎖,并發(fā)性能差。即使在創(chuàng)建成功以后,獲取實(shí)例仍然是串行化操作。
飽漢模式(懶漢模式)--雙重加鎖檢查DCL(Double Check Lock)
public class Singleton {
/**
* 對(duì)保存實(shí)例的變量添加volatile的修飾
*/
private volatile static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
//先檢查實(shí)例是否存在,如果不存在才進(jìn)入下面的同步塊
if(instance == null){
//同步塊,線程安全的創(chuàng)建實(shí)例
synchronized(Singleton.class){
//再次檢查實(shí)例是否存在,如果不存在才真的創(chuàng)建實(shí)例
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}優(yōu)點(diǎn):懶加載,線程安全。
注:實(shí)例必須有 volatile 關(guān)鍵字修飾,其保證初始化完全。
餓漢模式
public class Singleton {
//4:定義一個(gè)靜態(tài)變量來(lái)存儲(chǔ)創(chuàng)建好的類(lèi)實(shí)例
//直接在這里創(chuàng)建類(lèi)實(shí)例,只會(huì)創(chuàng)建一次
private static Singleton instance = new Singleton();
//1:私有化構(gòu)造方法,好在內(nèi)部控制創(chuàng)建實(shí)例的數(shù)目
private Singleton(){
}
//2:定義一個(gè)方法來(lái)為客戶(hù)端提供類(lèi)實(shí)例
//3:這個(gè)方法需要定義成類(lèi)方法,也就是要加static
//這個(gè)方法里面就不需要控制代碼了
public static Singleton getInstance(){
//5:直接使用已經(jīng)創(chuàng)建好的實(shí)例
return instance;
}
}優(yōu)點(diǎn):餓漢模式天生是線程安全的,使用時(shí)沒(méi)有延遲。
缺點(diǎn):?jiǎn)?dòng)時(shí)即創(chuàng)建實(shí)例,啟動(dòng)慢,有可能造成資源浪費(fèi)。
Holder模式
public class Singleton {
/**
* 類(lèi)級(jí)的內(nèi)部類(lèi),也就是靜態(tài)的成員式內(nèi)部類(lèi),該內(nèi)部類(lèi)的實(shí)例與外部類(lèi)的實(shí)例
* 沒(méi)有綁定關(guān)系,而且只有被調(diào)用到才會(huì)裝載,從而實(shí)現(xiàn)了延遲加載
*/
private static class SingletonHolder{
/**
* 靜態(tài)初始化器,由JVM來(lái)保證線程安全
*/
private static Singleton instance = new Singleton();
}
/**
* 私有化構(gòu)造方法
*/
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}優(yōu)點(diǎn):將懶加載和線程安全完美結(jié)合的一種方式(無(wú)鎖)。
關(guān)于java單例模式如何寫(xiě)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
文章名稱(chēng):java單例模式如何寫(xiě)
網(wǎng)頁(yè)網(wǎng)址:http://www.yijiale78.com/article44/gdcshe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、定制網(wǎng)站、全網(wǎng)營(yíng)銷(xiāo)推廣、自適應(yīng)網(wǎng)站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)