This commit is contained in:
wangcongtao
2020-03-09 11:48:39 +08:00
parent 640b519fd5
commit eaa12ba5d2
39 changed files with 1239 additions and 423 deletions

View File

@@ -0,0 +1,146 @@
package com.mogo.service.impl;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.connection.socket.SocketManager;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.impl.analytics.impl.MogoAnalyticsImpl;
import com.mogo.service.impl.imageloader.glide.GlideImageLoader;
import com.mogo.service.impl.intent.IntentManager;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.windowview.IMogoWindowManager;
import com.mogo.utils.logger.Logger;
/**
* @author congtaowang
* @since 2020-03-06
* <p>
* 描述
*/
@Route( path = MogoServicePaths.PATH_SERVICE_APIS )
public class MogoServiceApis implements IMogoServiceApis {
private static final String TAG = "MogoServiceApis";
private static Object sLock = new Object();
@Override
public IMogoAnalytics getAnalyticsApi() {
return MogoAnalyticsImpl.getInstance();
}
@Override
public IMogoSocketManager getSocketManagerApi( Context context ) {
return SocketManager.getInstance( context );
}
@Override
public IMogoFragmentManager getFragmentManagerApi() {
return SingletonsHolder.get( IMogoFragmentManager.class );
}
@Override
public IMogoImageloader getImageLoaderApi() {
return GlideImageLoader.getInstance();
}
@Override
public IMogoIntentManager getIntentManagerApi() {
return IntentManager.getInstance();
}
@Override
public IMogoMapService getMapServiceApi() {
return SingletonsHolder.get( IMogoMapService.class );
}
@Override
public IMogoNetwork getNetworkApi() {
return SingletonsHolder.get( IMogoNetwork.class );
}
@Override
public IMogoMsgCenter getMsgCenterApi() {
return SingletonsHolder.get( IMogoMsgCenter.class );
}
@Override
public IMogoStatusManager getStatusManagerApi() {
return SingletonsHolder.get( IMogoStatusManager.class );
}
@Override
public void init( Context context ) {
}
@Override
public synchronized IMogoCardManager getCardManagerApi() {
return getApiInstance( IMogoCardManager.class, MogoServicePaths.PATH_CARD_MANAGER );
}
@Override
public IMogoDataManager getDataManagerApi() {
return getApiInstance( IMogoDataManager.class, MogoServicePaths.PATH_DATA_MANAGER );
}
@Override
public IMogoRegisterCenter getRegisterCenterApi() {
return getApiInstance( IMogoRegisterCenter.class, MogoServicePaths.PATH_REGISTER_CENTER );
}
@Override
public IMogoSearchManager getSearchManagerApi() {
return getApiInstance( IMogoSearchManager.class, MogoServicePaths.PATH_SEARCH_MANAGER );
}
@Override
public IMogoSettingManager getSettingManager() {
return getApiInstance( IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER );
}
@Override
public IMogoWindowManager getWindowManager() {
return getApiInstance( IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER );
}
private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {
synchronized ( sLock ) {
inst = SingletonsHolder.get( clazz );
if ( inst != null ) {
return inst;
}
T newInst = ( T ) ARouter.getInstance().build( path ).navigation();
try {
SingletonsHolder.registerApi( clazz, newInst );
Logger.d( TAG, "keep IProvider instance to SingletonHolder: path = %s", path );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
return newInst;
}
}
return inst;
}
}

View File

@@ -0,0 +1,46 @@
package com.mogo.service.impl.singleton;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.impl.fragmentmanager.MogoFragmentManager;
import com.mogo.service.impl.map.MogoMapService;
import com.mogo.service.impl.network.MogoNetWorkService;
import com.mogo.service.impl.statusmanager.MogoMsgCenter;
import com.mogo.service.impl.statusmanager.MogoStatusManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author congtaowang
* @since 2020-03-06
* <p>
* 描述
*/
public class SingletonsHolder {
private static final Map< Class, Object > sSingletons = new ConcurrentHashMap<>();
static {
sSingletons.put( IMogoFragmentManager.class, new MogoFragmentManager() );
sSingletons.put( IMogoMapService.class, new MogoMapService() );
sSingletons.put( IMogoNetwork.class, new MogoNetWorkService() );
sSingletons.put( IMogoMsgCenter.class, new MogoMsgCenter() );
sSingletons.put( IMogoStatusManager.class, new MogoStatusManager() );
}
public static < T > T get( Class clazz ) {
return ( T ) sSingletons.get( clazz );
}
public static < T extends IProvider > void registerApi( Class< ? extends IProvider > api, T impl ) throws Exception {
if ( api == null || impl == null ) {
throw new Exception( "IProvider 接口类型和实例不能为 null" );
}
sSingletons.put( api, impl );
}
}