package github.javaguide.factory; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; /** * 获取单例对象的工厂类 * * @author shuang.kou * @createTime 2020年06月03日 15:04:00 */ public final class SingletonFactory { private static final Map OBJECT_MAP = new HashMap<>(); private SingletonFactory() { } public static T getInstance(Class c) { String key = c.toString(); Object instance = OBJECT_MAP.get(key); synchronized (c) { if (instance == null) { try { instance = c.getDeclaredConstructor().newInstance(); OBJECT_MAP.put(key, instance); } catch (IllegalAccessException | InstantiationException e) { throw new RuntimeException(e.getMessage(), e); } catch (NoSuchMethodException | InvocationTargetException e) { e.printStackTrace(); } } } return c.cast(instance); } }