Singleton:指僅僅被實例化一次的類。
這文章里講了三種單例。
- 實現(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() { ... }
}
意思是說我直接可以用INSTANCE。線程安全。
- 私有化實例。
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
這里書中還提到了序列化和反序列化的內(nèi)容,不詳細看了。貼一段序列化和反序列化的概念:
Object serialization 允許你將實現(xiàn)了Serializable接口的對象轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲以備以后重新生成原來的對象。
舉個例子:
網(wǎng)絡(luò)傳輸?shù)臅r候,可以傳字符串,亦可以傳對象object,例如socket,傳字符串的時候接收方很容易解析出來,但是,傳一個對象的時候,對方讀完字節(jié)流后,不知道你傳的什么對象,所以沒辦法給轉(zhuǎn)成原來的對象并解析對象的屬性,這時候就要用到序列化和反序列化。
類實現(xiàn)序列化接口,socket發(fā)送這個對象的字節(jié)流,接收方到流后就可以將流反序列化成對象,然后使用對象的方法和屬性。
--這里只講了一個網(wǎng)絡(luò)傳輸方面的應(yīng)用,其實還有很多作用的,可以自己研究下
- 包含單個元素的枚舉類型。這個似乎不怎么常用,但是是Java1.5后著重推薦使用的,優(yōu)點是絕對防止多次實例化,不會被反射。
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
這里有一些以前學習的其他傳統(tǒng)的Singleton,涉及到線程安全什么的。
SEE:
http://blog.csdn.net/u014723123/article/details/32728925
http://blog.csdn.net/jason0539/article/details/23297037/