3單例模式
要點(diǎn):
1寨躁,某個(gè)類(lèi)只能有一個(gè)實(shí)例
2肤无,必須自行創(chuàng)建實(shí)例
3,必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
實(shí)現(xiàn):
1肯尺,只提供私有構(gòu)造方法
2沃缘,含有一個(gè)該類(lèi)的靜態(tài)私有對(duì)象
3,提供一個(gè)靜態(tài)公有方法用于創(chuàng)建则吟,獲取靜態(tài)私有對(duì)象
代碼實(shí)現(xiàn)方案:
1 餓漢式
對(duì)象創(chuàng)建過(guò)程中實(shí)例化? 在類(lèi)加載時(shí)就創(chuàng)建實(shí)例(空間換時(shí)間 線(xiàn)程安全)
public class SingletonOne{
//1創(chuàng)建類(lèi)中私有構(gòu)造方法
private SingletonOne(){}
//2創(chuàng)建該類(lèi)私有靜態(tài)實(shí)例
private static SingletonOne instance=new SingletonOne();
//3創(chuàng)建公有靜態(tài)方法返回靜態(tài)實(shí)例對(duì)象
public static SingletonOne getInstance(){
return instance;
}
}
2 懶漢式
靜態(tài)公有方法中實(shí)例化? 第一次使用時(shí)進(jìn)行實(shí)例化(時(shí)間換空間)
public class SingletonTwo{
1創(chuàng)建靜態(tài)實(shí)例對(duì)象
private static SingletonTwo instance=null;
2創(chuàng)建私有構(gòu)造方法
private SingletonTwo(){}
3創(chuàng)建開(kāi)放的靜態(tài)方法提供實(shí)例對(duì)象
public static SingletonTwo getoInstance(){
if(instance==null)
instance=new SingletonTwo();
return instance;
}
}
實(shí)用場(chǎng)景:
1創(chuàng)建對(duì)象占用資源過(guò)多槐臀,但同時(shí)又需要用到該類(lèi)對(duì)象
2對(duì)系統(tǒng)內(nèi)資源要求統(tǒng)一讀寫(xiě),如讀寫(xiě)配置信息
3當(dāng)多個(gè)實(shí)例存在可能引起程序邏輯錯(cuò)誤氓仲,如號(hào)碼生成器