每个对象都缓存到统一的容器中,使用唯一标识获取实例
package com.tiger.singleton;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by tiger.
*/
public class SingletonContainer {
private static Object INSTANCE = null;
private SingletonContainer(){ }
private static Map<String,Object> IOC = new ConcurrentHashMap<>();
public static <T> T getInstance(String className){
if(!IOC.containsKey(className)){
try {
//通过全路径创建实例
INSTANCE = Class.forName(className).newInstance();
IOC.put(className, INSTANCE);
}catch (Exception e){
e.printStackTrace();
}
return (T) INSTANCE;
}else{
return (T) IOC.get(className);
}
}
//防止被反序列化破坏单例
private Object readResolve(){ return INSTANCE;}
}