Android使用mvp模式入門

什麼是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:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章