-
單例模式要點(diǎn):
- 一個(gè)類只需要一個(gè)實(shí)例化對(duì)象;
- 必須自行創(chuàng)建實(shí)例;
- 必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
-
實(shí)現(xiàn):
- 只提供私有構(gòu)造方法;
- 有一個(gè)該類的靜態(tài)私有對(duì)象;
- 提供一個(gè)靜態(tài)公有方法用于創(chuàng)建、獲取靜態(tài)私有對(duì)象;
- 私有構(gòu)造方法->不能隨意創(chuàng)建實(shí)例;
- 靜態(tài)私有對(duì)象:確保只有一個(gè)實(shí)例對(duì)象
- 靜態(tài)公有方法->提供一個(gè)外部接口,可直接通過類名調(diào)用該方法,方法內(nèi)部能直接調(diào)用靜態(tài)對(duì)象;
- 餓漢式實(shí)現(xiàn)方法:在創(chuàng)建類時(shí)實(shí)例化
// 在創(chuàng)建類時(shí)直接實(shí)例化,空間換時(shí)間
public class SingletonOne{
//1. 私有構(gòu)造
private SingletonOne(){
}
//2. 在創(chuàng)建該類時(shí)初始化靜態(tài)私有對(duì)象
private static SingletonOne instance = new SingletonOne();
// 3.提供靜態(tài)公有方法返回靜態(tài)實(shí)例對(duì)象
public static SingletonOne getInstance(){
return instance;
}
}
- 懶漢式實(shí)現(xiàn)方法:靜態(tài)公有方法中實(shí)例化
// 在調(diào)用靜態(tài)公有方法后,才完成對(duì)象的實(shí)例化
public class SingletonTwo{
//1. 私有構(gòu)造
private SingletonOne(){
}
//2. 在創(chuàng)建該類時(shí)初始化靜態(tài)私有對(duì)象
private static SingletonTwo instance = null;
// 3.提供靜態(tài)公有方法返回靜態(tài)實(shí)例對(duì)象
public static SingletonOne getInstance(){
if(instance==null) // 保證只會(huì)實(shí)例化一次
instance = new SingletonTwo();
return instance;
}
}
- 餓漢式 vs 懶漢式
單例模式的實(shí)現(xiàn)方法 | 實(shí)例化對(duì)象的時(shí)間 | 空間特點(diǎn) | 時(shí)間特點(diǎn) | 線程安全 |
---|---|---|---|---|
餓漢式 | 在類加載時(shí)候完成 | 空間占用時(shí)間長 | 在第一次使用時(shí)加載速度快 | 線程安全 |
懶漢式 | 在第一次調(diào)用共有方法時(shí)完成 | 不會(huì)造成內(nèi)存空間浪費(fèi) | 在第一次使用時(shí)加載時(shí)間相對(duì)慢 | 線程不安全 |
文章來源地址http://www.zghlxwxcb.cn/news/detail-644210.html
文章來源:http://www.zghlxwxcb.cn/news/detail-644210.html
到了這里,關(guān)于【java】設(shè)計(jì)模式——單例模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!