Singleton:指仅仅被实例化一次的类。
这文章里讲了三种单例。
- 实现公有静态成员函数,并将之设置为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() { ... }
}
这里书中还提到了序列化和反序列化的内容,不详细看了。贴一段序列化和反序列化的概念:
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
举个例子:
网络传输的时候,可以传字符串,亦可以传对象object,例如socket,传字符串的时候接收方很容易解析出来,但是,传一个对象的时候,对方读完字节流后,不知道你传的什么对象,所以没办法给转成原来的对象并解析对象的属性,这时候就要用到序列化和反序列化。
类实现序列化接口,socket发送这个对象的字节流,接收方到流后就可以将流反序列化成对象,然后使用对象的方法和属性。
--这里只讲了一个网络传输方面的应用,其实还有很多作用的,可以自己研究下
- 包含单个元素的枚举类型。这个似乎不怎么常用,但是是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/