一:概述
最近公司项目用的MVP模式,相比之前MVC结构来说简直不能适应啊~~,随着移动项目业务越来越复杂,功能越来越多一个耦合性低、扩展性强的项目结构就显的尤为重要。当然,如果要将你的项目转移到MVP模式,那么首先需要对MVP有深入的理解,不能仅仅停留在认知状态,所以研究了一下写了登陆的小Demo分享给大家,至于什么是MVP我们先看张图;
微博 ::http://weibo.com/icuihai
邮箱:icuihai@aliyun.com;
Github: https://github.com/icuihai
二,MVP模式:
MVC模式中逻辑代码一般都是写在view层也就是说写在activity或fragment中,在项目不是很大的情况下是能满足需要的,但是在项目逻辑比较复杂,功能比较多的时候就感觉activity中代码显得比较臃肿了,所以MVP应运而生。MVP 呢分为Model,View,Presenter三层,Model曾主要存放数据,实体类。VIew层当然对应的是Activity用来展示用户交互,Presenter也是最重要的一层负责View与MOdel交互。
三,实战
首先我先说下登陆的基本流程,用户输入账号和密码匹配成功则跳转到其他界面,失败则给出提示,当然我们的目的是练习MVP模式,不要纠结哪些什么网络请求,安全之类的~~~~~~~,
界面:
项目代码:
1,User实体类
- public class UserBean {
- private String username;
- private String 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,
- public interface IUser {
- void login(String username, String password, OnLoginListener onLoginListener);
- }
- public class User implements IUser {
- @Override
- public void login(final String username, final String password, final OnLoginListener onLoginListener) {
- handler.post(new Runnable() {
- @Override
- public void run() {
- if ("cuihai".equals(username) && "123".equals(password)) {
- UserBean userBean = new UserBean();
- userBean.setUsername(username);
- userBean.setPassword(password);
- onLoginListener.loadSuccess(userBean);
- } else {
- onLoginListener.showFailed();
- }
- }
- });
- }
-
- Handler handler = new Handler();
- }
- public interface OnLoginListener {
- void loadSuccess(UserBean userBean);
- void showFailed();
- }
3,View层
- public interface IUserView {
- String getUsername();
- String getPassword();
- void startLoginActivity(UserBean userBean);
- void showFailed();
-
- }
4,Presenter层
- public class UserPresenter {
- IUserView iUserView;
- IUser iUser;
-
- public UserPresenter(IUserView iUserView){
- this.iUserView=iUserView;
- this.iUser=new User();
- }
- Handler handler=new Handler();
-
- public void login(){
- iUser.login(iUserView.getUsername(), iUserView.getPassword(), new OnLoginListener() {
- @Override
- public void loadSuccess(final UserBean userBean) {
- handler.post(new Runnable() {
- @Override
- public void run() {
- iUserView.startLoginActivity(userBean);
- }
- });
- }
- @Override
- public void showFailed() {
- iUserView.showFailed();
- }
- });
- }
- }
5,Activity
- package com.cuihai.mvpdemo;
-
- public class MainActivity extends AppCompatActivity implements IUserView {
- EditText mUsername;
- EditText mPassword;
- Button mLogin;
- UserPresenter userPresenter=new UserPresenter(this);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mUsername = (EditText) findViewById(R.id.username);
- mPassword = (EditText) findViewById(R.id.password);
- mLogin= (Button) findViewById(R.id.login);
-
- mLogin.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- userPresenter.login();
- }
- });
-
- }
-
- @Override
- public String getUsername() {
- return mUsername.getText().toString();
- }
-
- @Override
- public String getPassword() {
- return mPassword.getText().toString();
- }
-
- @Override
- public void startLoginActivity(UserBean userBean) {
- Intent intent=new Intent(MainActivity.this, LoginActivity.class);
- startActivity(intent);
- }
- @Override
- public void showFailed() {
- Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
- }
- }
跳转的LoginActivity里面没什么,这里就不贴出来了,操作界面:
其实在项目中到底是选择MVC还是MVP取决于你的项目复杂程度,不能为了使用MVP而使用,合适的才是最好的,不是吗~~~~~;