Singleton:通常被用来代表那些本质上具有唯一性的系统组件。
import java.io.*;
public class Elvis {
/*
//Singleton with final filed
* 好处:组成类的成员的声明很清楚地表明了一个类是一个singleton:
* 公有的静态域是final的,所以该域总是包含相同的对象引用,性能上稍微领先
public static final Elvis INSTANCE = new Elvis();
private Elvis(){
//...
}
*/
//Singleton with static factory
//好处:提供了灵活性(在不改变API的情况下,允许我们改变想法,把类做成singleton,
//或不做成singleton)
privatestaticfinal Elvis INSTANCE = new Elvis();
private Elvis(){
//...
}
publicstatic Elvis getInstance(){
returnINSTANCE;
}
//为了使一个singleton类变成可序列化的,仅仅实现Serializable是不够的,因为一个序列化的实例在
//每次返序列化时都会导致一个新的实例,所以必须提供一个readResolve方法
//readReovle规范范:http://java.sun.com/j2se/1.3/docs/guide/serialization/spec/input.doc6.html
private Object readResolve() throws ObjectStreamException{
/*
* return the one true Elvis and let the garbage collector
* take care of the Elvis impersonator(演员, 模拟(名人等的)艺人)
*/
returnINSTANCE;
}
//Entry
publicstaticvoid main(String[] args) {
System.out.println(Elvis.INSTANCE);
}
}
浙公网安备 33010602011771号