單例模式

單例模式

? ??私有的類構(gòu)造器

? ??持有自己類型的屬性

? ??對(duì)外提供獲取實(shí)例的靜態(tài)方法

1、懶漢模式

線程不安全,延遲初始化

public class SingletonDemo {

????????private static SingletonDemo singletonDemo;

????????private SingletonDemo(){}

????????public static SingletonDemo getInstence(){

????????????????if(singletonDemo == null){

????????????????????????singletonDemo = new SingletonDemo();

? ? ? ? ? ? ? ?}?

???????????????return singletonDemo;

????????}

}

2、餓漢模式

線程安全,容易產(chǎn)生垃圾,一開始就初始化

public class SingletonDemo {

????????private static SingletonDemosingletonDemo =new SingletonDemo();

????????private SingletonDemo(){};

????????public static SingletonDemo getInstence(){

????????????????return singletonDemo;

????????}

}

3、雙重鎖模式

線程安全,延遲初始化,安全在多線程情況下保持高性能,雙重鎖模式,進(jìn)行了兩次判斷,第一次是為了避免不要的實(shí)例,第二次是進(jìn)行同步,避免多線程問題。

public class SingletonDemo {

????????private static SingletonDemo singletonDemo;

????????private SingletonDemo(){}

????????public static SingletonDemo getInstence(){

????????????????if(singletonDemo == null){

????????????????????????synchronized (SingletonDemo.class){

????????????????????????????????if (singletonDemo == null){

????????????????????????????????????????singletonDemo = new SingletonDemo();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

????????????????????????}

????????????}

????????????return singletonDemo;

????}

}

4、靜態(tài)內(nèi)部類單例模式

只有第一次調(diào)用getInstence()方法時(shí),虛擬機(jī)才會(huì)加載Inner,并初始化singletonDemo,

只有一個(gè)線程可以獲得對(duì)象的初始化鎖,其它線程無法進(jìn)行初始化,保證對(duì)象的唯一性,

public class SingletonDemo {

????????private SingletonDemo(){};

????????public static SingletonDemo getInstence(){

????????return Inner.singletonDemo;

????????}

????????private static class Inner{

????????????????private static SingletonDemosingletonDemo =new SingletonDemo();

????????}

}

5、枚舉單例模式

默認(rèn)枚舉實(shí)例的創(chuàng)建是線程安全的,并且在任何情況下都是單例。

枚舉類隱藏了私有的構(gòu)造器

枚舉類的域 是相應(yīng)類型的一個(gè)實(shí)例對(duì)象

public enum SingletonDemo{

????????INSTENCE;

????public static SingletonDemo getInstence(){

????????return SingletonDemo.INSTENCE;

????}

}

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

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