实现Singleton有两种方法,这两种方法都要吧构造器保持为私有的,并导出公有的静态成员,以便允许客户端能够访问该类的唯一实例。
1)、饿汉式的单例模式
2)、懒汉式的单例模式public class Singleton {
private static Singleton instance =new Singleton();
private Singleton() {}
public Singleton getInstance() {
return instance;
}
}
public class Singleton {
private static Singleton instance =null;
private Singleton() {} // 构造一个私有的构造函数防止别人new自己的对象
/**
*其中synchronized防止因为线程同步问题创建多个Singleton对象
**/
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
要想在实现了Singleton模式的类编程可序列化的,仅仅在声明中加上“implementys Serializable”是不够的。为了维护并保证Singleton,必须声明所有实例都是瞬时的,并提供一个readResolve方法。否则,每次反序列化一个序列化的实例时,都会创建一个新的实例。
private Object readResolve() {
return instance;
}
在Java 1.5版本后,实现Singleton还有第三种方法。只需要编写一个包含单个的元素的枚举类型。这种方法提供了无偿的序列化机制,绝对防止了多次实例化。单元素的枚举类型是实现Singleton的最佳方法。
private enum Singleton {
instance;
}