什麼是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 ,第一時間推送博文源碼