您的位置:首页 > 移动开发 > Android开发

小试牛刀MVP模式的运用

2016-07-28 17:09 405 查看
MVP模式也就是:model-处理业务逻辑,其实就是数据的读写,view-处理ui控件,也就是显示,presenter-主导器 用于操作model和view。

通过网上简单的例子后,我也决定把mvp引用到项目中来,通过实践发现 ,mvp模式,其实是降低了activity或fragment的代码压力,不至于在activity或fragment中即实现了ui,又给ui赋值,使代码解耦度高。

我也在项目里的登入界面中简单的运用一下MVP:

首先我先讲一下以前是如何做的:

protected void onCreate(Bundle savedInstanceState){
EditText mEtAccount = (EditText) findViewById(R.id.et_account);
EditText mEtPSW = (EditText) findViewById(R.id.et_psw);
//通过SharedPreferences获取账号或密码
mEtAccount.setText(PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PHONE));
mEtPSW.setText(PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PWD));
}
/**
*调用登入接口
*/
private void login() {
//这里我就不写了,主要是通过账号和密码调用后台登入账号,进行登入。
//在登入成功的地方 通过SharedPreferences保存账号和密码
PreferencesHelper.saveLoginInfo(account, psw);
}
下面是我通过网上的mvp例子来写这个地方
1.创建一个bean也就是usename和password

public class UserBean {
private String userName;
private String password;
public UserBean() {
super();

}
public UserBean(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
2.创建接口IUserModel:这个就是mvp中model,用于存放和获取账号和密码
public interface IUserModel {
void setUserName(String userName);
void setPassword(String password);
UserBean load();
}
3.创建类UserModel:用来实现IUserModel,在这个类里面 实现load()方法是用于保存数据
public class UserModel implements IUserModel{

@Override
public void setUserName(String userName) {}

@Override
public void setPassword(String password) {}

@Override
public UserBean load() {
//这个地方我是通过获取账号和密码,如果有需要也可以通过网络或数据库获取数据放入bean中
String userName=PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PHONE);
String password=PreferencesHelper.getUserLogin(PreferencesHelper.KEY_LOGIN_PWD);
return new UserBean(userName, password);
}

} 4.创建接口IUserView :这个就是mvp中的view,用于对账号和密码这两个edittext进行读操作和写操作
public interface IUserView {
void setUserName(String userName);
void setPassword(String password);
String getUserName();
String getPassword();
} 5.创建类UserPresenter:这个就是mvp中的presenter,用于操作model和view
public class UserPresenter {
private IUserModel iUserModel;
private IUserView iUserView;
public UserPresenter(IUserView iUserView) {
super();
this.iUserModel = new UserModel();
this.iUserView = iUserView;
}

public void saveUser(String userName,String password){
//这个地方是用SharedPreferences保存账号和密码
PreferencesHelper.saveLoginInfo(userName, password);
iUserModel.setUserName(userName);
iUserModel.setPassword(password);
}
public void loadUser(){
//这个地方是获取保存的账号和密码
UserBean bean=iUserModel.load();
iUserView.setUserName(bean.getUserName());
iUserView.setPassword(bean.getPassword());
}
}
6,然后在activity中运用mvp:
public class LoginActivity extends BaseAct implements IUserView{//这地方要实现IUserView接口
protected void onCreate(Bundle savedInstanceState) {
EditText mEtAccount = (EditText) findViewById(R.id.et_account);
EditText mEtPSW = (EditText) findViewById(R.id.et_psw);
presenter=new UserPresenter(this);
presenter.loadUser();
}
private void login(){
presenter.saveUser(account, psw);//登入成功后保存账号和密码
}
@Override
public void setUserName(String userName) {
mEtAccount.setText(userName);
}

@Override
public void setPassword(String password) {
mEtPSW.setText(password);
}

@Override
public String getUserName() {
return mEtAccount.getText().toString();
}

@Override
public String getPassword() {
return mEtPSW.getText().toString();
}

}activity中的代码只是片段,主要是几点是实现IUserView接口,初始化UserPresenter,然后在显示值得地方调用loadUser(),在保存的地方调saveUser()方法,最后在实现的方法中将值放入两个editText中就行了。
mvp这只是初次尝试比普通的的开发和mvc还是先进很多,唯一的缺点就是代码量增加了,就为了那几行代码,就创建了5个java文件,不过 在它的优点面前,这点缺点还是可以容忍的,这次只是简单的运用, 下一步我要尝试从服务端获取集合的数据如何用mvp模式做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android mvp