什么是MVP (Model-View-Presenter)
MVP模式:
View不直接与Model交互,而是通过与Presenter交互来与Model间接交互
Presenter与View的交互是通过接口来进行的,更有利于添加单元测试
通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑
举例个登录例子。
效果:
项目结构
(1)首先我们需要一个UserBean,用来保存用户信息:
public class UserBean {
private String mobile ;
private String userpwd ;
public UserBean (String mobile, String userpwd) {
this .mobile = mobile;
this .userpwd = userpwd;
}
public String getMobile() {
return mobile;
}
public String getUserpwd() {
return userpwd;
}
}
(2)再来看看View接口:
public interface IUserView {
int getID();
String getMobile();
String getUserPwd();
void setMobile (String mobile);
void setUserpwd (String userpwd);
}
(3)Model接口:
public interface IUserModel {
void setID (int id);
void setMoblie (String moblie);
void setUserPwd (String userPwd);
UserBean load (int id);
}
public class UserModel implements IUserModel {
private String usermobile;
private String userPwd;
private int mID;
private SparseArray<UserBean> mUsererArray = new SparseArray<UserBean>();
@Override
public void setID(int id) {
// TODO Auto-generated method stub
mID = id;
}
@Override
public void setMoblie(String mobile) {
// TODO Auto-generated method stub
usermobile = mobile;
}
@Override
public void setUserPwd(String userpwd) {
// TODO Auto-generated method stub
userPwd = userpwd;
UserBean UserBean = new UserBean(usermobile, userpwd);
mUsererArray.append(mID, UserBean);
}
@Override
public UserBean load(int id) {
// TODO Auto-generated method stub
mID = id;
UserBean userBean = mUsererArray.get(mID, new UserBean("no data ",
"not data"));
return userBean;
}
}
(4)Presenter:
至此,Presenter就能通过接口与View及Model进行交互了:
public class UserPresenter {
private IUserView mUserView ;
private IUserModel mUserModel ;
public UserPresenter (IUserView view) {
mUserView = view;
mUserModel = new UserModel();
}
public void saveUser( int id , String moblie , String userpwd) {
mUserModel .setID (id );
mUserModel.setMoblie (moblie );
mUserModel.setUserPwd (userpwd );
}
public void loadUser( int id ) {
UserBean user = mUserModel .load (id );
mUserView.setMobile(user.getMobile ());//通过调用IUserView的方法来更新显示
mUserView.setUserpwd (user.getUserpwd ());
}
}
(5)LoginActivity:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_login:
mUserPresenter.saveUser(getID(), getMobile(), getUserPwd());
break;
case R.id.btn_getValue:
mUserPresenter.loadUser(getID());
break;
default:
break;
}
}
View只负责处理与用户进行交互,并把数据相关的逻辑操作都扔给了Presenter去做。而Presenter调用Model处理完数据之后,再通过IUserView更新View显示的信息
更多源码请关注微信公众号:aikaifa ,第一时间推送博文源码