Android使用mvp模式入门

来源:互联网 发布:java 引号转义 编辑:程序博客网 时间:2024/06/04 18:02

什么是MVP (Model-View-Presenter)

MVP模式:

View不直接与Model交互,而是通过与Presenter交互来与Model间接交互

PresenterView的交互是通过接口来进行的,更有利于添加单元测试

通常ViewPresenter是一对一的,但复杂的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:

@Overridepublic 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 ,第一时间推送博文源码


0 0