admin 管理员组文章数量: 887007
用MVP模式构建Android代码
用MVP模式构建Android代码
一、MVP简介
在进行软件开发过程中,我们通常会使用设计模式来辅助我们构建代码,以实现代码的可维护性和可复用性。而MVC模式是开发人员最了解的一个模式,MVP就是以MVC为基础发展演变而来的。
MVC模式:
首先我们先来回顾一下MVC模式:
MVC模式即Model(模型)-view(视图)-controller(控制器)
- M:Model,代表业务数据和业务规则
- V:View,代表用户界面
- Controller,代表控制器,接受用户输入并调用模型和视图完成用户的请求
优点:MVC模式实现了M层和V层的代码分离,C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。此模式多运用在WEB开发。
缺点:MVC中Model、View、Controller之间相互发生通信。
MVP模式:
MVP模式在MVC的结构上将Controller层替换为Presenter层。
- M:Model,代表业务数据和业务规则
- V:View,代表用户界面
- P:Presenter,连接Model和View
MVP模式在Android中使用:
1、View层View的interface,定义View的行为,然后使用Activity或是Fragment实现这个接口,它定义了视图的变化。
2、Model层定义Model的interface,用来定义数据层发生变化时的通知接口,因为Model不能直接与View交互,所以它与Presenter交互,然后再通过Presenter和View交互。
3、Presenter负责具体业务逻辑,请求数据,把数据送到Model,或者监听Model的数据变化,接受View层的动作。,负责通过View层的视图变化。
二、实例演示
接下来跟着实例了解了解如何在Android使用MVP模式:
效果图:
文件结构:
(一)Model
实体类:
package com.example.administrator.mvp.bean;public class User {private String username;private String password;public String getUsername(){return username;}public String getPassword(){return password;}public void setUsername(String username){this.username = username;}public void setPassword(String password){this.password = password;}
}
package com.example.administrator.mvp.biz;public interface IUserBiz {public void login(String username,String password,OnLoginListener loginListener);
}
package com.example.administrator.mvp.biz;import com.example.administrator.mvp.bean.User;public interface OnLoginListener {public void loginSuccess(User user);public void loginFailed();
}
package com.example.administrator.mvp.biz;import com.example.administrator.mvp.bean.User;public class UserBiz implements IUserBiz{@Overridepublic void login(final String username,final String password,final OnLoginListener loginListener){//模拟子线程耗时操作new Thread(){@Overridepublic void run(){try{Thread.sleep(2000);} catch (InterruptedException e){e.printStackTrace();}//模拟登录成功if ("wxh".equals(username) && "123".equals(password)){User user = new User();user.setUsername(username);user.setPassword(password);loginListener.loginSuccess(user);} else{loginListener.loginFailed();}}}.start();}
}
(二)Presenter
package com.example.administrator.mvp.presenter;import android.os.Handler;import com.example.administrator.mvp.bean.User;
import com.example.administrator.mvp.biz.IUserBiz;
import com.example.administrator.mvp.biz.OnLoginListener;
import com.example.administrator.mvp.biz.UserBiz;
import com.example.administrator.mvp.view.IUserLoginView;public class UserLoginPresenter {private IUserBiz userBiz;private IUserLoginView userLoginView;private Handler mHandler = new Handler();public UserLoginPresenter(IUserLoginView userLoginView){this.userLoginView = userLoginView;this.userBiz = new UserBiz();}public void login(){userLoginView.showLoading();userBiz.login(userLoginView.getUserName(), userLoginView.getPassword(), new OnLoginListener(){@Overridepublic void loginSuccess(final User user){//需要在UI线程执行mHandler.post(new Runnable(){@Overridepublic void run(){userLoginView.toMainActivity(user);userLoginView.hideLoading();}});}@Overridepublic void loginFailed(){//需要在UI线程执行mHandler.post(new Runnable(){@Overridepublic void run(){userLoginView.showFailedError();userLoginView.hideLoading();}});}});}public void clear(){userLoginView.clearUserName();userLoginView.clearPassword();}}
(三)View
package com.example.administrator.mvp.view;
import com.example.administrator.mvp.bean.User;public interface IUserLoginView {public String getUserName();public String getPassword();public void clearUserName();public void clearPassword();public void showLoading();public void hideLoading();public void toMainActivity(User user);public void showFailedError();
}
package com.example.administrator.mvp.view;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;import com.example.administrator.mvp.R;
import com.example.administrator.mvp.bean.User;
import com.example.administrator.mvp.presenter.UserLoginPresenter;public class UserLoginActivity extends AppCompatActivity implements IUserLoginView{private EditText mEtUsername,mEtPassword;private Button mBtnLogin,mBtnClear;private ProgressBar mPbLoading;private UserLoginPresenter mUserLoginPresenter = new UserLoginPresenter(this);@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_user_login);initViews();}private void initViews(){mEtUsername = (EditText) findViewById(R.id.username);mEtPassword = (EditText) findViewById(R.id.password);mBtnClear = (Button) findViewById(R.id.clear);mBtnLogin = (Button) findViewById(R.id.login);mPbLoading = (ProgressBar) findViewById(R.id.loading);mBtnLogin.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){mUserLoginPresenter.login();}});mBtnClear.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){mUserLoginPresenter.clear();}});}@Overridepublic String getUserName(){return mEtUsername.getText().toString();}@Overridepublic String getPassword(){return mEtPassword.getText().toString();}@Overridepublic void clearUserName(){mEtUsername.setText("");}@Overridepublic void clearPassword(){mEtPassword.setText("");}@Overridepublic void showLoading(){mPbLoading.setVisibility(View.VISIBLE);}@Overridepublic void hideLoading(){mPbLoading.setVisibility(View.GONE);}@Overridepublic void toMainActivity(User user){Toast.makeText(this, user.getUsername() +" login success , to MainActivity", Toast.LENGTH_SHORT).show();}@Overridepublic void showFailedError(){Toast.makeText(this,"login failed", Toast.LENGTH_SHORT).show();}
}
参考博客
本文标签: 用MVP模式构建Android代码
版权声明:本文标题:用MVP模式构建Android代码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732356998h1534714.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论