更新時(shí)間:2022-04-29 10:13:38 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1685次
很多小伙伴對(duì)Java單例模式的使用不是很了解,動(dòng)力節(jié)點(diǎn)小編就來為大家進(jìn)行講解。單例是一種創(chuàng)建設(shè)計(jì)模式,它確保只有一個(gè)同類對(duì)象存在,并為任何其他代碼提供對(duì)它的單點(diǎn)訪問。
單例與全局變量幾乎具有相同的優(yōu)點(diǎn)和缺點(diǎn)。盡管它們非常方便,但它們破壞了代碼的模塊化。
使用示例:許多開發(fā)人員認(rèn)為單例模式是一種反模式。這就是為什么它在 Java 代碼中的使用量正在下降的原因。
盡管如此,Java 核心庫中還是有相當(dāng)多的 Singleton 示例:
java.lang.Runtime#getRuntime()
java.awt.Desktop#getDesktop()
java.lang.System#getSecurityManager()
識(shí)別: Singleton 可以通過靜態(tài)創(chuàng)建方法識(shí)別,返回相同的緩存對(duì)象。
實(shí)現(xiàn)一個(gè)草率的 Singleton 非常容易。您只需要隱藏構(gòu)造函數(shù)并實(shí)現(xiàn)靜態(tài)創(chuàng)建方法即可。
Singleton.java: 單例
包 refactoring_guru.singleton.example.non_thread_safe;
公共最終類單例{
私有靜態(tài)單例實(shí)例;
公共字符串值;
私人單例(字符串值){
// 下面的代碼模擬了緩慢的初始化。
嘗試 {
線程.sleep(1000);
} 捕捉(InterruptedException ex){
ex.printStackTrace();
}
this.value = 值;
}
公共靜態(tài)單例getInstance(字符串值){
如果(實(shí)例==空){
實(shí)例 = 新單例(值);
}
返回實(shí)例;
}
}
DemoSingleThread.java: 客戶端代碼
包 refactoring_guru.singleton.example.non_thread_safe;
公共類 DemoSingleThread {
public static void main(String[] args) {
System.out.println("If you see the same value, then singleton was reused (yay!)" + "\n" +
"If you see different values, then 2 singletons were created (booo!!)" + "\n\n" +
"RESULT:" + "\n");
Singleton singleton = Singleton.getInstance("FOO");
Singleton anotherSingleton = Singleton.getInstance("BAR");
System.out.println(singleton.value);
System.out.println(anotherSingleton.value);
}
}
OutputDemoSingleThread.txt: 執(zhí)行結(jié)果
如果您看到相同的值,則重復(fù)使用單例(耶!)
如果您看到不同的值,則創(chuàng)建了 2 個(gè)單例(噓!?。?
結(jié)果:
FOO
FOO
通過上述介紹,相信大家對(duì)Java單例模式的使用已經(jīng)有所了解,希望對(duì)大家的學(xué)習(xí)能夠有所幫助哦。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)