实现原理:

MainActivity 用来更新UI,和显示业务逻辑的结果!

LoginPresenterCompl 用来处理 业务逻辑

ILoginPresenter 业务处理类抽象出来的接口

ILoginView activity抽象出来的接口

1.为什么要把activity的UI更新方法抽象出来?

因为你的项目不可能只有一个activity吧,如果想要每个activity都用MVP模式,那么就把共有的方法抽象出来就可以的

2.为什么要把业务处理类抽象出来?

同理,每个activity的业务处理逻辑肯定是不一样的,我们可以使用java的特性,即重写,虽然每个业务类的方法名,参数,返回类型相同,但是我们可以在里面处理不同的逻辑

比如A在里面处理吃西瓜,B在里面处理吃梨子,返回的都是水果类型!

3.为什么要用MVP模式?

当你的代码量很多的时候,如果不采用较好的框架,后续维护和查找就会显得很乱,自己都不知道从来找,出现问题第一时间也没办法分析出来,总之一个好的APK,最好是在前期采用好的框架搭建!

首先是activity的代码:

ublic class MainActivity extends Activity implements ILoginView{

private Button button1;
private Button button2;
private EditText edit1;
private EditText edit2;
private ILoginPresenter presenterCompl;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
presenterCompl = new LoginPresenterCompl(this);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
edit1 = (EditText)findViewById(R.id.edit1);
edit2 = (EditText)findViewById(R.id.edit2);

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
presenterCompl.doLogin(edit1.getText().toString(), edit2.getText().toString());
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
presenterCompl.clear();
}
});

}
@Override
public void onClearText() {
edit1.setText("");
edit2.setText("");
Toast.makeText(getApplicationContext(), "clear", 1).show();
}

@Override
public void onLoginResult(Boolean result, int code) {
if(result){
Toast.makeText(getApplicationContext(), "登录成功", 1).show();
}else{
Toast.makeText(getApplicationContext(), "登录失败", 1).show();
}
}

}

他实现了ILoginView接口,这个接口定义的两个方法,一个用来清除edittext的数据,一个用来显示逻辑任务类的处理结果,结果的方法可以根据自己公司具体业务需求来定!

public interface ILoginView {
public void onClearText();
public void onLoginResult(Boolean result, int code);
}

接下来是逻辑任务类LoginPresenterCompl

public class LoginPresenterCompl implements ILoginPresenter{
private ILoginView mView;
private User user;
@Override
public void clear() {
mView.onClearText();
}

@Override
public void doLogin(String name, String password) {
boolean result = false;
int code = 0;
if(name.equals(user.getName())&&password.equals(user.getPassword())){
result = true;
code = 1;
}else{
result = false;
code = 0;
}
mView.onLoginResult(result, code);
}
public LoginPresenterCompl(ILoginView view) {
this.mView = view;
user = new User("000","123456");
}
}

这个类实现了ILoginPresenter接口,因为你以后项目的逻辑任务肯定不止一种情况,所以我们抽象出来共同的方法

只要实现这个接口就行,具体的任务逻辑看自己公司需要,比如我们公司采用的登录验证,在activity中获得用户输入

的账号和密码,然后跟实体类的数据进行对比(注意这里的实体类是为了方便才这样写的,实际情况应该是从数据库中

或者从网络请求中获取数据然后保存到实体类,这里就不具体说了),最后调用activity里面抽象出来的更新UI的方法,

实际上就是把结果返回给activity的,因为activity实现了这个这个接口!

public interface ILoginPresenter {
public void clear();
public void doLogin(String name, String password);
}

实体类:

public class User {
private String name;
private String password;
public User(String name,String pwd) {
this.name = name;
this.password = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}

}

android MVP设计模式!的更多相关文章

  1. Android MVP 设计模式

    1.基本概念 Model    : 模型   负责处理数据的加载或者存储,比如从网络或本地数据库获取数据等: View     : 视图    负责界面数据的展示,与用户进行交互: Presenter ...

  2. android mvp设计模式

    什么是MVP MVP,全称 Model-View-Presenter.要说MVP那就不得不说一说它的前辈——MVC(Model-View-Controller,模型-视图-控制器). View:对应于 ...

  3. Android之MVP设计模式

    一.概述 MVP设计模式的前身是MVC,这个无需再议 在安卓工程中MVC对应关系如下: Layout->View : 对应布局文件Activity->Controller,View (其中 ...

  4. Android MVP模式

    转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...

  5. Android MVP模式的初识

      MVP是什么?或许在之前更多的人知道的是MVC这个模式(Model View Controller),然而MVP与MVC最不同的一点是M与V是不直接 关联的也是就Model与View不存在直接关系 ...

  6. Android MVP Presenter 中引发的空指针异常

    一.概述 最近对 googlesamples/android-architecture 中的 MVP-dagger 进行了学习.对照项目的 MVP-dagger 分支,对 MVP-dagger 进行了 ...

  7. Android MVP+Retrofit+RxJava实践小结

    关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...

  8. [Android]Android MVP&依赖注入&单元测试

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5422443.html Android MVP&依赖注入 ...

  9. Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化

    Android MVP粗来已经有段时间了,在项目中我也多多少少用了一些,不得不说代码使用这种模式后,条例确实清晰了好多,整个流程看起来有点各司其职的感觉(另一种的java面向对象的方式). 不过这里是 ...

随机推荐

  1. C#与C++的发展历程第二 - C#4.0再接再厉

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 开始本系列的第二篇,这篇文章中将介绍C#4.0中一些变化,如C++有类似功 ...

  2. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  3. tomcat RMI 停不掉

    项目采用jfinal框架,做了一个RMI的服务,对其它程序提供服务.实现上,写了一个RmiPlugin package com.wisdombud.cloudtalk.plugin; import j ...

  4. Eclipse安装SVN教程

    第1种安装方法 下载SVN安装包.地址:subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240. 根据Eclipse版本进行下载 ...

  5. php修改

    做出一张表,点击登录后进入此表   然后多建立一个<td></td>用来增加一列操作 <h1>英雄联盟英雄表</h1> <table width= ...

  6. 搭建LNAMP环境(二)- 源码安装Nginx1.10

    上一篇:搭建LNAMP环境(一)- 源码安装MySQL5.6 1.yum安装编译nginx需要的包 yum -y install pcre pcre-devel zlib zlib-devel ope ...

  7. 用原始方法解析复杂字符串,json一定要用JsonMapper么?

    经常采集数据,肯定会碰到解析字符串,包括整个页面的html,或者json以及一些不标准的json格式... 以前用json序列化,有时候需要实体类,有的时候没有,比较麻烦,听说可以用JsonMappe ...

  8. T-SQL:毕业生出门需知系列(九)

    <SQL 必知必会>读书笔记 -- 第9课 汇总数据 9.1 聚集函数:对某些行运行的函数,计算并返回一个值 案例: -- 确定表中函数 -- 获得表中某些行的和 -- 找出表列的最大值. ...

  9. CRL快速开发框架升级到3.1

    CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...

  10. angularjs之filter过滤器

    现在公司用ionic,就是基于angularjs封装了一些api用于webapp,最近用的angularjs的filter确实省了很多代码,现在总结一下! ng比较鸡肋的过滤器,这里就一笔带过吧!鸡汤 ...