实现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;
}
本文详细介绍了Java中实现Singleton模式的两种常见方式:饿汉式和懒汉式,并解释了如何在实现了Singleton模式的类中进行序列化以维护Singleton状态。此外,还提到了在Java1.5版本后实现Singleton的一种更简单的方法,即通过单元素枚举类型。
750

被折叠的 条评论
为什么被折叠?



