MVP现在已经是非常流行的Android架构
MVC
M-Model 数据模型
C-Controller 控制器,基本上就是Activity
V-View 视图,XML文件
传统的MVC存在问题:布局文件能做的事情特别少,实际上关于该布局文件中的数据绑定的操作,事件处理的代码都在Activity中,造成了Activity既像View又像Controller
MVP
M-Model 数据模型
V-View 对应于Activity,负责View的绘制以及与用户交互
P-Presenter 控制器,负责完成View与Model间的交互
MVP与MVC的显著区别是Model不与View直接交互,通过Presenter完成,Presenter与View之间的交互通过接口完成
经典实例——登录页面
Model
1 | public User { |
事务逻辑,登录功能的接口
1 | public interface IUserBiz |
事务逻辑的实现类
1 | public class UserBiz implements IUserBiz |
View
View需要实现一个接口,该接口用来跟Presenter交互
这些接口里面操作UI元素,可以通过分析View中的UI元素知道需要哪些接口函数
1 | public interface IUserLoginView |
实现的Activity或Fragment,其中要持有Presenter的引用,功能通过Presenter实现
1 | public class UserLoginActivity extends ActionBarActivity implements IUserLoginView |
Presenter
Presenter直接操作Model,通过事务逻辑实现类实现功能
Presenter持有View的引用,可以获得UI输入,并通过接口刷新UI
1 | public class UserLoginPresenter |
模型中一般需要提供回调接口
1 | public interface OnLoginListener |
数据流
- Presenter通过IView接口拿到UI输入
- Presenter调用Model事务逻辑实现功能
- Model事务逻辑通过回调接口返回结果给Presenter
- Presenter调用IView接口刷新UI