package com.dh.foundation.manager; import com.dh.foundation.utils.DLoggerUtils; import java.util.HashMap; import java.util.Map; /** * Created By: Seal.Wu * Date: 2015/4/14 * Time: 10:22 */ public class SingletonInjectFactory { private final static SingletonInjectFactory instance = new SingletonInjectFactory(); private final Map<Class, Class> classClassMap = new HashMap<>(); private final Map<Class, Object> classObjectMap = new HashMap<>(); public static SingletonInjectFactory getInstance() { return instance; } private SingletonInjectFactory() { } public void registerDependencySingletonClass(Class clazz) { if (!classClassMap.containsKey(clazz)) { classClassMap.put(clazz, clazz); } } public <C, I extends C> void registerDependencySingletonImplementClass(Class<C> clazz, Class<I> implementClazz) { if (!classClassMap.containsKey(clazz)) { classClassMap.put(clazz, implementClazz); } } public <C, I extends C> void registerDependencySingletonImplementObject(Class<C> clazz, I implementObject) { if (!classClassMap.containsKey(clazz)) { classClassMap.put(clazz, implementObject.getClass()); classObjectMap.put(clazz, implementObject); } } public <T> void registerDependencySingletonObject(Class<T> clazz, T object) { if (!classClassMap.containsKey(clazz)) { classClassMap.put(clazz, object.getClass()); classObjectMap.put(clazz, object); } } public <T> T getObjectByClass(Class<T> clazz) { if (classClassMap.containsKey(clazz)) { if (classObjectMap.containsKey(clazz)) { return (T) classObjectMap.get(clazz); } else { try { Object value = clazz.newInstance(); classObjectMap.put(clazz, value); return (T) value; } catch (InstantiationException e) { DLoggerUtils.e(e); } catch (IllegalAccessException e) { DLoggerUtils.e(e); } } } else { try { Object value = clazz.newInstance(); return (T) value; } catch (InstantiationException e) { DLoggerUtils.e(e); } catch (IllegalAccessException e) { DLoggerUtils.e(e); } } return null; } }