Singleton:指僅僅被實(shí)例化一次的類霎迫。
這文章里講了三種單例惶室。
- 實(shí)現(xiàn)公有靜態(tài)成員函數(shù),并將之設(shè)置為final玄货。
// Singleton with public field
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuilding() { ... }
}
意思是說(shuō)我直接可以用INSTANCE皇钞。線程安全。
- 私有化實(shí)例松捉。
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
這里書中還提到了序列化和反序列化的內(nèi)容夹界,不詳細(xì)看了。貼一段序列化和反序列化的概念:
Object serialization 允許你將實(shí)現(xiàn)了Serializable接口的對(duì)象轉(zhuǎn)換為字節(jié)序列隘世,這些字節(jié)序列可以被完全存儲(chǔ)以備以后重新生成原來(lái)的對(duì)象可柿。
舉個(gè)例子:
網(wǎng)絡(luò)傳輸?shù)臅r(shí)候,可以傳字符串丙者,亦可以傳對(duì)象object复斥,例如socket,傳字符串的時(shí)候接收方很容易解析出來(lái)械媒,但是目锭,傳一個(gè)對(duì)象的時(shí)候,對(duì)方讀完字節(jié)流后纷捞,不知道你傳的什么對(duì)象痢虹,所以沒(méi)辦法給轉(zhuǎn)成原來(lái)的對(duì)象并解析對(duì)象的屬性,這時(shí)候就要用到序列化和反序列化主儡。
類實(shí)現(xiàn)序列化接口奖唯,socket發(fā)送這個(gè)對(duì)象的字節(jié)流,接收方到流后就可以將流反序列化成對(duì)象糜值,然后使用對(duì)象的方法和屬性丰捷。
--這里只講了一個(gè)網(wǎng)絡(luò)傳輸方面的應(yīng)用,其實(shí)還有很多作用的寂汇,可以自己研究下
- 包含單個(gè)元素的枚舉類型瓢阴。這個(gè)似乎不怎么常用,但是是Java1.5后著重推薦使用的健无,優(yōu)點(diǎn)是絕對(duì)防止多次實(shí)例化荣恐,不會(huì)被反射。
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
這里有一些以前學(xué)習(xí)的其他傳統(tǒng)的Singleton,涉及到線程安全什么的叠穆。
SEE:
http://blog.csdn.net/u014723123/article/details/32728925
http://blog.csdn.net/jason0539/article/details/23297037/