/**
* 登记式单例模式
*/
public static class LogMap{
private static HashMap<String,LogMap> map= new HashMap<>();
static {
LogMap logMap = new LogMap();
// 输出看看name是什么
String name = logMap.getClass().getName();
String name1 = LogMap.class.getName();
System.out.println("name1>>>>>>>>>>>>>>>>"+name1);
map.put(name,logMap);
System.out.println("输出看看name是什么>>>>>>>>>>"+name);
}
private LogMap(){};//构造器
public static LogMap getObject(String name){
if (StringUtils.isNullOrEmpty(name)) {
name = LogMap.class.getName();
System.out.println("name 为空>>>>>>>>>>>>>>>>>>"+name);
}
if (null == map.get(name)) {
try {
map.put(name, (LogMap) Class.forName(name).newInstance());
System.out.println("进来了第一次");
} catch (Exception e) {
e.printStackTrace();
}
}
return map.get(name);
}
public String about() {
return "登记式单例模式";
}
}
内部类只有在外部类被调用才加载,产生LogMap实例,又不用加锁,此模式有懒汉式 和饿汉式的优点,屏蔽了他们的缺点,是最好的单例模式。