add api
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user