Как изменить реализацию во время выполнения - PullRequest
2 голосов
/ 12 апреля 2020

У меня есть несколько классов, которые из моего клиентского кода мне нужно вызвать. Прямо сейчас у меня есть список, а затем клиент должен проверить список для реализации. Это беспорядок в использовании.

object Adapter {
    val list = listOf(
        A(),
        B()
        ...
    )
}

В идеале я хотел бы сохранить только одну реализацию в памяти, но иногда мне нужно переключаться между реализациями.

1 Ответ

2 голосов
/ 12 апреля 2020

Заставьте все ваши классы реализовать интерфейс. Поскольку все они реализуют один и тот же интерфейс, вы можете назначить конкретные экземпляры одной и той же переменной.

 interface IWorker {
     fun doWork()
 }

Затем в классе Adapter вы можете указать, какую реализацию вы хотите использовать.

object Adapter {
    var worker: IWorker = Default()
}

По умолчанию представляет любой из ваших классов.

class Default: IWorker {
    override fun doWork() {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...