Этот вопрос касается дизайна ООП (класса / интерфейса).
Я занимаюсь разработкой библиотеки Android, а не приложения.Приложение будет использовать эту библиотеку.Эта библиотека разработана по шаблону репозитория.
Один репозиторий и 2 источника данных (локальный, удаленный).
Поскольку локальный источник данных использует «SharedPreference», ему необходим Context.
Ниже представлен интерфейс моего репозитория и реализуются.
interface MyRepository {
fun create(String data)
fun get(key: String): String
}
class MyRepositoryImpl(
private val localDataSource: LocalDataSource,
private val remoteDataSource: RemoteDataSource
): MyRepository {
fun create(String data) {
localDataSource.create(data);
remoteDataSource.create(data);
}
fun get(key: String): String {
// temp code
return localDataSource.get(key)
}
companion object {
private var instance: MyRepository? = null
fun getInstance(context: Context): MyRepository {
if (instance == null) {
val localDataSource: LocalDataSource = LocalDataSourceImpl.getInstance(context)
val remoteDataSource: RemoteDataSource = RemoteDataSourceImpl.getInstance()
instance = MyRepositoryImpl(localDataSource, remoteDataSource)
}
return instance!!
}
}
}
MyRepositoryImpl реализован по шаблону Singleton.Потому что это должно быть использовано в любом месте приложения.Таким образом, разработчики приложения должны иметь возможность получить экземпляр MyRepository, например:
val myRepository = MyRepositoryImpl.getInstance(context)
val data = myRepository.get("key")
Но выглядит странно ... "getInstance (context)".Я думаю, что это не очень хороший подход.Есть еще какой-нибудь умный дизайн, пожалуйста?