简介
由 IBM 的子公司 Taligent 提出
MVC模式审议后延伸提出的一种软件设计模式
与MVC的最大区别:将业务逻辑和业务展示也做了一层隔离,Model与View不直接关联的
GWTP/Swing/Nette Framework 就使用这种模式
M - Model
数据层 - 业务模型
- 封装与业务逻辑相关的数据
- 数据读取/处理/存储,提供数据接口
V - View
展示层 - 用户界面
- 数据显示
- 动画效果
- 接受用户操作
P - Presenter
逻辑层 - 作为 View 与 Model 交互的中间纽带
- 从 Model 获取数据,将数据处理成可以直接显示的数据
- 监听 View 的用户事件,处理与用户交互的逻辑
模型

mvp.png
View 接收用户事件,传递给 Presenter 处理逻辑,Presenter 更新 Model 数据,Model 改变后通知 Presenter 更新 View,View 从 Presenter 获取数据显示
优点
- 模型与视图完全分离
- 可以将一个 Presenter 用于多个视图,而不需要改变 Presenter 的逻辑
- 可以脱离 UI 针对逻辑进行单元测试,Presenter 与 View 的交互是通过接口(interface)来进行的
缺点
- View 和 Presenter 的交互会过于频繁,使得他们的联系过于紧密
参考文档
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter
https://www.jianshu.com/p/68aa6071c02e