1.在类的域中创建一个final引用,并将构造器置未private:
Class People{ public static People Instance=new People(); private People(){ } }
2.在通过静态工厂方法:
Class People{ private static People INSTANCE=new People(); private People(){ } pubic People instancePeople(){ return INSTANCE; } }
3.声明一个包含单个元素的枚举类型
public Enum People(){ INSTANCE; }
对于1和2,在实现Serializable接口的同时要重写readResolve():
private Object readResolve(){ return INSTANCE; }
这样当JVM从内存中反序列化地"组装"一个新对象时,就会自动调用这个 readResolve方法来返回我们指定好的对象了, 单例规则也就得到了保证.
同时也要注意 把构造器设置为私有 也使得这个类不可子类化
原文:https://www.cnblogs.com/lccsblog/p/10988810.html