您的位置:首页 > 其它

浅谈MVP模式附有登陆Demo

2016-10-24 17:28 357 查看
一:概述

最近公司项目用的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实体类

[java] view
plain copy

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,

[html] view
plain copy

public interface IUser {  

    void login(String username, String password, OnLoginListener onLoginListener);  

}  

[html] view
plain copy

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();  

}  

[html] view
plain copy

public interface OnLoginListener {  

    void loadSuccess(UserBean userBean);  

    void showFailed();  

}  

3,View层

[html] view
plain copy

public interface IUserView {  

    String getUsername();  

    String getPassword();  

    void startLoginActivity(UserBean userBean);  

    void showFailed();  

  

}  

4,Presenter层

[html] view
plain copy

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

[html] view
plain copy

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里面没什么,这里就不贴出来了,操作界面:

http://www.17sysj.com/video/lpds_b6b2434a5570a

其实在项目中到底是选择MVC还是MVP取决于你的项目复杂程度,不能为了使用MVP而使用,合适的才是最好的,不是吗~~~~~;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: