Ответ на этот вопрос больше связан с архитектурными решениями, чем с техническими ограничениями.Вы можете реализовать то же самое в Java (даже в Java7) с анонимными экземплярами (при условии, что это будет иметь гораздо больше шаблонного образца и будет труднее читать).
Идея в MVP заключить контракт, заключающийся в том, чтоВнедрение заключается в том, что каждый докладчик знает, как извлекать, манипулировать и представлять в указанный контракт.Потенциально представление может реализовывать несколько контрактов и иметь нескольких докладчиков.Также каждый экземпляр презентатора работает только с одной реализацией контракта, но у вас может быть два экземпляра, обслуживающих две разные реализации.
Если вместо каждого представления, соответствующего контрактам каждого презентатора, каждый вызов докладчика принимает лямбдурано или поздно вы столкнетесь с проблемами.
Например, представьте презентатора, который асинхронно выбирает данные и кэширует их в памяти:
- Представление вызывает метод презентатора
fetchData()
. - Ведущий вызывает метод
showLoading()
контракта. - (проходит некоторое время)
- Ведущий вызывает методы контракта
hideLoading()
и showData(data)
. - Пользователь взаимодействует и снова запускает
fetchData()
- Докладчик вызывает
showData()
с кэшированными данными
В этом случае, если вместо лямбды мы использоваликонтракт, мы должны были бы запросить две разные лямбды в одном и том же методе: один, когда он кэшируется, и другой, когда это не так.Мы также связываем реализацию представления с презентатором, в будущем другой реализации интерфейса презентатора могут не понадобиться эти две лямбды, потому что логика изменилась.
Важно помнить, что в MVP в идеале обаView и Presenter взаимодействуют друг с другом через интерфейсы, и в этом случае интерфейс Presenter не должен зависеть от деталей реализации и просто раскрывать, какие действия они могут выполнять.