Item3: 用私有構(gòu)造器或者枚舉類型強化Singleton屬性

Singleton:指僅僅被實例化一次的類。

這文章里講了三種單例。

  1. 實現(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。線程安全。

  1. 私有化實例。
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)用,其實還有很多作用的,可以自己研究下

  1. 包含單個元素的枚舉類型。這個似乎不怎么常用,但是是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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容