Item3: 用私有构造器或者枚举类型强化Singleton属性

Singleton:指仅仅被实例化一次的类。

这文章里讲了三种单例。

  1. 实现公有静态成员函数,并将之设置为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() { ... }
}

这里书中还提到了序列化和反序列化的内容,不详细看了。贴一段序列化和反序列化的概念:

Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
举个例子:
网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。
--这里只讲了一个网络传输方面的应用,其实还有很多作用的,可以自己研究下

  1. 包含单个元素的枚举类型。这个似乎不怎么常用,但是是Java1.5后着重推荐使用的,优点是绝对防止多次实例化,不会被反射。
public enum Elvis {
    INSTANCE;
    
    public void leaveTheBuilding() { ... }
}

这里有一些以前学习的其他传统的Singleton,涉及到线程安全什么的。
SEE:
http://blog.csdn.net/u014723123/article/details/32728925
http://blog.csdn.net/jason0539/article/details/23297037/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容