package com.snowcattle.game.manager; import com.snowcattle.game.common.constant.Loggers; import com.snowcattle.game.service.IService; import org.slf4j.Logger; import java.util.LinkedHashMap; import java.util.Map; /** * Created by jwp on 2017/5/6. */ public abstract class AbstractLocalManager implements ILocalManager{ protected static final Logger log = Loggers.serverLogger; protected Map<Class,Object> services; public AbstractLocalManager() { services = new LinkedHashMap<Class,Object>(40,0.5f); } @Override public <X,Y extends X> void create(Class<Y> clazz,Class<X> inter) throws Exception{ log.info(clazz.getSimpleName() + " is create"); Object newObject = clazz.newInstance(); if(newObject instanceof IService){ ((IService)newObject).startup(); } add(newObject,inter); } @Override public <T> void add(Object service, Class<T> inter) { log.info(service.getClass().getSimpleName() + " is add"); services.put(inter, service); } @Override public <T> T get(Class<T> clazz) { return (T)services.get(clazz); } @Override public void shutdown() { // Object[] ss = new Object[services.size()]; // services.values().toArray(ss); Object[] ss = services.values().toArray(new Object[0]); for(int i=ss.length-1;i>0;i--){ if(ss[i] instanceof IService) { try { ((IService)ss[i]).shutdown(); } catch (Exception e) { Loggers.errorLogger.error(e.toString(),e); } } } } }