Enum枚举单例
具有天然序列化机制
public enum EnumInstance {
INSTANCE;
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static EnumInstance getInstance(){
return INSTANCE;
}
}
测试类
public class TestEnum {
public static void main(String[] args) throws Exception {
EnumInstance instance=EnumInstance.getInstance();
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("singleton_enum"));
oos.writeObject(instance);
File file=new File("singleton_enum");
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
EnumInstance newInstance= (EnumInstance) ois.readObject();
System.out.println(instance);
System.out.println(newInstance);
System.out.println(instance==newInstance);
}
}
运行结果如图:
序列化不受影响的原因
容器单例
public class ContainerSingleton {
private ContainerSingleton(){
}
private static Map<String,Object> singletonMap=new HashMap<>();
public static void putInstance(String key,Object instance){
if(instance!=null){
if(singletonMap.containsKey(key)){
singletonMap.put(key,instance);
}
}
}
public static Object getInstance(String key){
return singletonMap.get(key);
}
}