小试牛刀MVP模式的运用

来源:互联网 发布:淘宝兼职广告语大全集 编辑:程序博客网 时间:2024/04/28 18:05

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

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

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

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

protected void onCreate(Bundle savedInstanceState){EditTextmEtAccount = (EditText) findViewById(R.id.et_account);EditTextmEtPSW = (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{@Overridepublic void setUserName(String userName) {}@Overridepublic void setPassword(String password) {}@Overridepublic 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);//登入成功后保存账号和密码}@Overridepublic void setUserName(String userName) {mEtAccount.setText(userName);}@Overridepublic void setPassword(String password) {mEtPSW.setText(password);}@Overridepublic String getUserName() {return mEtAccount.getText().toString();}@Overridepublic String getPassword() {return mEtPSW.getText().toString();}}
activity中的代码只是片段,主要是几点是实现IUserView接口,初始化UserPresenter,然后在显示值得地方调用loadUser(),在保存的地方调saveUser()方法,最后在实现的方法中将值放入两个editText中就行了。

mvp这只是初次尝试比普通的的开发和mvc还是先进很多,唯一的缺点就是代码量增加了,就为了那几行代码,就创建了5个java文件,不过 在它的优点面前,这点缺点还是可以容忍的,这次只是简单的运用, 下一步我要尝试从服务端获取集合的数据如何用mvp模式做。




0 0
原创粉丝点击