Разделяет приложение на три основных компонента:
- Model: Представляет данные и бизнес-логику. Не знает ничего о View или Presenter.
- View: Отвечает за отображение данных и взаимодействие с пользователем. Пассивен, не содержит логики принятия решений. Делегирует все действия пользователя Presenter'у.
- Presenter: Выступает посредником между Model и View. Обрабатывает действия пользователя, извлекает данные из Model и обновляет View. Содержит логику представления.
Плюсы:
- Улучшенная тестируемость (логика Presenter'а легко тестируется изолированно).
- Разделение ответственности.
- Переиспользование логики представления (в разном View).
Минусы:
- Увеличение количества классов.
- boilerplate-код (интерфейсы View, Presenter'а).
Взаимодействие:
- View сообщает Presenter'у о действиях пользователя.
- Presenter взаимодействует с Model (получает/сохраняет данные, выполняет бизнес-логику).
- Presenter получает результат от Model.
- Presenter обновляет View, вызывая его методы.
Пример:
java