3、單例模式(創(chuàng)建型)

對于系統(tǒng)的一些功能組件,有一個即可,例如數(shù)據(jù)庫連接池,線程池。。。全局唯一。想要控制住對象的創(chuàng)建就用到了單例模式。

單例模式:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。


單例模式圖1-1

實現(xiàn)單例模式的步驟:

? ? 1、構(gòu)造方法私有化,不讓外部類創(chuàng)建對象,內(nèi)部創(chuàng)建好,賦值給變量。

? ? 2、對外提供一個方法訪問內(nèi)部創(chuàng)建好的對象。

單例根據(jù)創(chuàng)建時機(jī)又分為兩種:(1)懶漢模式,非線程安全? (2)餓漢模式

具體實現(xiàn)方式如下:

餓漢式:

1、class Single1{

????public static final Single1 INSTANCE = new??Single1();

????private Single1(){

????}

}

2、推薦,可以防止反射攻擊

enum Single2{

????INSTANCE;

}

3、

class Single3{

????private static final Single3 INSTANCE = new??Single3();

????private String info;//需要在創(chuàng)建實例對象時,讀取配置文件信息,為這個實例變量初始化

????private Single3(){

?Properties pro = new Properties();//集合,key和value都是String類型

?????????try {

? ? ? ? ? ? ? ? ?pro.load(new??FileInputStream("info.properties"));//默認(rèn)在項目根目錄

?????????} catch (IOException e) {

?????????????e.printStackTrace();

?????????}

? ? ? ? ? ? ?info = pro.getProperty("info");

????}

????//用來返回INSTANCE

????public static Single3 getInstance(){

?????????return INSTANCE;

????}

}

懶漢式:

1、class Single4{

????private static Single4 instance;//這里沒有創(chuàng)建

????private Single4(){ }

????public static Single4 getInstance(){

? ? ? ?if(instance == null){?? ?? ? //并不是每次進(jìn)入方法都需要同步

? ? ? ?synchronized (Single4.class) {

?????????????????if(instance == null){? //空的時間創(chuàng)建

?????????????????????instance = new Single4();

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

? ? ? ?}

? ?}

?????????return instance;

? ?}

}

2、內(nèi)部類實現(xiàn)

class Single5{

????private Single5(){}

????public static Single5 getInstance(){

?????????return Inner.INSTANCE;

????}

????private static class Inner{

?????????static final Single5 INSTANCE = new??Single5();

????}

}

最后,思考如何方式反射攻擊?(通過反射獲取構(gòu)造函數(shù),然后調(diào)用setAccessible(true)就可以調(diào)用私有的構(gòu)造函數(shù))

JDK1.5之后推薦枚舉方式,可以有效防止反射攻擊。

? ?

?著作權(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)容