Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class AbstractService {
- public abstract String getName();
- public abstract void onCreate();
- public abstract void onDestroy();
- }
- ======================================================================================================================================================================================================================================================
- public abstract class DatabaseService extends AbstractService {
- private StorIOSQLite sqlite;
- public DatabaseService(StorIOSQLite sqlite) {
- this.sqlite = sqlite;
- }
- protected StorIOSQLite getSQLite() {
- return sqlite;
- }
- protected void releaseSQLiteReference() {
- this.sqlite = null;
- }
- }
- ======================================================================================================================================================================================================================================================
- public abstract class NetworkService<S> extends AbstractService {
- private Retrofit retrofit;
- private S service;
- public NetworkService(String baseUrl, OkHttpClient client) {
- this.retrofit = new Retrofit.Builder()
- .baseUrl(baseUrl)
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
- .addConverterFactory(GsonConverterFactory.create(getGson()))
- .client(client)
- .build();
- }
- protected abstract S createService(Retrofit retrofit);
- protected abstract Gson getGson();
- protected void bindService() {
- this.service = createService(retrofit);
- }
- protected void unbindService() {
- this.service = null;
- }
- protected S getService() {
- return this.service;
- }
- }
- ======================================================================================================================================================================================================================================================
- public interface IServiceManager {
- void registerService(AbstractService service);
- void unregisterService(AbstractService service);
- boolean isServiceAvailable(String serviceName);
- AbstractService getService(String serviceName);
- }
- ======================================================================================================================================================================================================================================================
- public class ServiceManager implements IServiceManager {
- private static volatile IServiceManager instance;
- private static final Object singletonLock = new Object();
- private final ReentrantLock lock;
- private final Map<String, AbstractService> services;
- public static IServiceManager getInstance() {
- IServiceManager localInstance = instance;
- if(localInstance == null) {
- synchronized (singletonLock) {
- localInstance = instance;
- if(localInstance == null) {
- localInstance = instance = new ServiceManager();
- }
- }
- }
- return localInstance;
- }
- private ServiceManager() {
- this.lock = new ReentrantLock();
- this.services = new HashMap<>(10, 0.4f);
- }
- @Override
- public void registerService(AbstractService service) {
- try {
- lock.lock();
- this.services.put(service.getName(), service);
- service.onCreate();
- } finally {
- lock.unlock();
- }
- }
- @Override
- public void unregisterService(AbstractService service) {
- try {
- lock.lock();
- this.services.remove(service.getName());
- service.onDestroy();
- } finally {
- lock.unlock();
- }
- }
- @Override
- public boolean isServiceAvailable(String serviceName) {
- try {
- lock.lock();
- return this.services.containsKey(serviceName);
- } finally {
- lock.unlock();
- }
- }
- @Override
- public AbstractService getService(String serviceName) {
- try {
- lock.lock();
- return this.services.get(serviceName);
- } finally {
- lock.unlock();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement