浅谈MVP模式附有登陆Demo

一:概述

最近公司项目用的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
  1. public class UserBean {  
  2.     private String username;  
  3.     private String password;  
  4.   
  5.     public String getUsername(){  
  6.         return username;  
  7.     }  
  8.     public void setUsername(String username){  
  9.         this.username=username;  
  10.     }  
  11.     public String getPassword(){  
  12.         return password;  
  13.     }  
  14.     public void setPassword(String password){  
  15.         this.password= password;  
  16.     }  
  17. }  

2,
[html]  view plain  copy
  1. public interface IUser {  
  2.     void login(String username, String password, OnLoginListener onLoginListener);  
  3. }  
[html]  view plain  copy
  1. public class User implements IUser {  
  2.     @Override  
  3.     public void login(final String username, final String password, final OnLoginListener onLoginListener) {  
  4.         handler.post(new Runnable() {  
  5.             @Override  
  6.             public void run() {  
  7.                 if ("cuihai".equals(username) && "123".equals(password)) {  
  8.                     UserBean userBean = new UserBean();  
  9.                     userBean.setUsername(username);  
  10.                     userBean.setPassword(password);  
  11.                     onLoginListener.loadSuccess(userBean);  
  12.                 } else {  
  13.                     onLoginListener.showFailed();  
  14.                 }  
  15.             }  
  16.         });  
  17.     }  
  18.   
  19.     Handler handler = new Handler();  
  20. }  
[html]  view plain  copy
  1. public interface OnLoginListener {  
  2.     void loadSuccess(UserBean userBean);  
  3.     void showFailed();  
  4. }  
3,View层

[html]  view plain  copy
  1. public interface IUserView {  
  2.     String getUsername();  
  3.     String getPassword();  
  4.     void startLoginActivity(UserBean userBean);  
  5.     void showFailed();  
  6.   
  7. }  

4,Presenter层

[html]  view plain  copy
  1. public class UserPresenter {  
  2.     IUserView iUserView;  
  3.     IUser iUser;  
  4.   
  5.     public UserPresenter(IUserView iUserView){  
  6.         this.iUserView=iUserView;  
  7.         this.iUser=new User();  
  8.     }  
  9.     Handler handler=new Handler();  
  10.   
  11.     public void login(){  
  12.         iUser.login(iUserView.getUsername(), iUserView.getPassword(), new OnLoginListener() {  
  13.             @Override  
  14.             public void loadSuccess(final UserBean userBean) {  
  15.                 handler.post(new Runnable() {  
  16.                     @Override  
  17.                     public void run() {  
  18.                         iUserView.startLoginActivity(userBean);  
  19.                     }  
  20.                 });  
  21.             }  
  22.             @Override  
  23.             public void showFailed() {  
  24.                 iUserView.showFailed();  
  25.             }  
  26.         });  
  27.     }  
  28. }  
5,Activity

[html]  view plain  copy
  1. package com.cuihai.mvpdemo;  
  2.   
  3. public class MainActivity extends AppCompatActivity implements IUserView  {  
  4.     EditText mUsername;  
  5.     EditText mPassword;  
  6.     Button mLogin;  
  7.     UserPresenter userPresenter=new UserPresenter(this);  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.activity_main);  
  13.         mUsername = (EditText) findViewById(R.id.username);  
  14.         mPassword = (EditText) findViewById(R.id.password);  
  15.         mLogin= (Button) findViewById(R.id.login);  
  16.   
  17.         mLogin.setOnClickListener(new View.OnClickListener() {  
  18.             @Override  
  19.             public void onClick(View view) {  
  20.                 userPresenter.login();  
  21.             }  
  22.         });  
  23.   
  24.     }  
  25.   
  26.     @Override  
  27.     public String getUsername() {  
  28.         return mUsername.getText().toString();  
  29.     }  
  30.   
  31.     @Override  
  32.     public String getPassword() {  
  33.         return mPassword.getText().toString();  
  34.     }  
  35.   
  36.     @Override  
  37.     public void startLoginActivity(UserBean userBean) {  
  38.         Intent intent=new Intent(MainActivity.this, LoginActivity.class);  
  39.         startActivity(intent);  
  40.     }  
  41.     @Override  
  42.     public void showFailed() {  
  43.         Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();  
  44.     }  
  45. }  
跳转的LoginActivity里面没什么,这里就不贴出来了,操作界面:

其实在项目中到底是选择MVC还是MVP取决于你的项目复杂程度,不能为了使用MVP而使用,合适的才是最好的,不是吗~~~~~;


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值