Advertisement
Guest User

Untitled

a guest
Feb 28th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. public abstract class AbstractService {
  2.  
  3. public abstract String getName();
  4.  
  5. public abstract void onCreate();
  6.  
  7. public abstract void onDestroy();
  8. }
  9.  
  10. ======================================================================================================================================================================================================================================================
  11.  
  12. public abstract class DatabaseService extends AbstractService {
  13.  
  14. private StorIOSQLite sqlite;
  15.  
  16. public DatabaseService(StorIOSQLite sqlite) {
  17. this.sqlite = sqlite;
  18. }
  19.  
  20. protected StorIOSQLite getSQLite() {
  21. return sqlite;
  22. }
  23.  
  24. protected void releaseSQLiteReference() {
  25. this.sqlite = null;
  26. }
  27. }
  28.  
  29. ======================================================================================================================================================================================================================================================
  30.  
  31. public abstract class NetworkService<S> extends AbstractService {
  32.  
  33. private Retrofit retrofit;
  34.  
  35. private S service;
  36.  
  37. public NetworkService(String baseUrl, OkHttpClient client) {
  38. this.retrofit = new Retrofit.Builder()
  39. .baseUrl(baseUrl)
  40. .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
  41. .addConverterFactory(GsonConverterFactory.create(getGson()))
  42. .client(client)
  43. .build();
  44. }
  45.  
  46. protected abstract S createService(Retrofit retrofit);
  47.  
  48. protected abstract Gson getGson();
  49.  
  50. protected void bindService() {
  51. this.service = createService(retrofit);
  52. }
  53.  
  54. protected void unbindService() {
  55. this.service = null;
  56. }
  57.  
  58. protected S getService() {
  59. return this.service;
  60. }
  61. }
  62.  
  63. ======================================================================================================================================================================================================================================================
  64.  
  65. public interface IServiceManager {
  66.  
  67. void registerService(AbstractService service);
  68.  
  69. void unregisterService(AbstractService service);
  70.  
  71. boolean isServiceAvailable(String serviceName);
  72.  
  73. AbstractService getService(String serviceName);
  74. }
  75.  
  76. ======================================================================================================================================================================================================================================================
  77.  
  78. public class ServiceManager implements IServiceManager {
  79.  
  80. private static volatile IServiceManager instance;
  81.  
  82. private static final Object singletonLock = new Object();
  83.  
  84. private final ReentrantLock lock;
  85.  
  86. private final Map<String, AbstractService> services;
  87.  
  88. public static IServiceManager getInstance() {
  89. IServiceManager localInstance = instance;
  90. if(localInstance == null) {
  91. synchronized (singletonLock) {
  92. localInstance = instance;
  93. if(localInstance == null) {
  94. localInstance = instance = new ServiceManager();
  95. }
  96. }
  97. }
  98.  
  99. return localInstance;
  100. }
  101.  
  102. private ServiceManager() {
  103. this.lock = new ReentrantLock();
  104. this.services = new HashMap<>(10, 0.4f);
  105. }
  106.  
  107. @Override
  108. public void registerService(AbstractService service) {
  109. try {
  110. lock.lock();
  111. this.services.put(service.getName(), service);
  112. service.onCreate();
  113. } finally {
  114. lock.unlock();
  115. }
  116. }
  117.  
  118. @Override
  119. public void unregisterService(AbstractService service) {
  120. try {
  121. lock.lock();
  122. this.services.remove(service.getName());
  123. service.onDestroy();
  124. } finally {
  125. lock.unlock();
  126. }
  127. }
  128.  
  129. @Override
  130. public boolean isServiceAvailable(String serviceName) {
  131. try {
  132. lock.lock();
  133. return this.services.containsKey(serviceName);
  134. } finally {
  135. lock.unlock();
  136. }
  137. }
  138.  
  139. @Override
  140. public AbstractService getService(String serviceName) {
  141. try {
  142. lock.lock();
  143. return this.services.get(serviceName);
  144. } finally {
  145. lock.unlock();
  146. }
  147. }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement