1.單例設(shè)計(jì)模式:
解決的問(wèn)題:保證一個(gè)類的對(duì)象在內(nèi)存中的唯一性茬腿。
應(yīng)用場(chǎng)景:多個(gè)程序都在操作同一個(gè)配置文件時(shí)歪赢,需要程序A操作后的結(jié)果化戳,程序B要知道并繼續(xù)基于A操作后
的結(jié)果進(jìn)行操作——前提:數(shù)據(jù)都存儲(chǔ)在配置文件對(duì)象中。
要求程序A和程序B操作的配置文件對(duì)象是同一個(gè)轨淌。
2.怎么實(shí)現(xiàn)單例模式迂烁?
a.不讓其他程序new看尼。
b.干脆在本類中自己new一個(gè)對(duì)象递鹉,這樣可以不讓其他程序new,自己new藏斩,可以實(shí)現(xiàn)數(shù)量控制躏结。
c.對(duì)外提供讓球他程序獲取該對(duì)象的方式。
解決:
類中的構(gòu)造函數(shù)私有化狰域。
在類中new一個(gè)對(duì)象
定義一個(gè)方法返回該對(duì)象媳拴。
3.代碼實(shí)現(xiàn):
A.餓漢式:
class Single
{//先創(chuàng)建一個(gè)本類對(duì)象
private static Single s=new Single( );
//構(gòu)造函數(shù)私有化
private Single(){
......
}//只有類自己可以訪問(wèn)
//定義一個(gè)方法返回該對(duì)象,讓其他程序可以控制兆览。
public static final Single getInstance(){
return s;
//之所以定義方法訪問(wèn)就是為了可控
}
}
Single s1=Single.getInstance();
Single s2=Single.getInstance();
s1==s2屈溉;//true
B.懶漢式:延遲加載方法
class Single
{
private static Single s=null;
private Single(){};
public static Single getInstance(){
if(s==null)
s=new Single();
return s;
}
}