所谓MVP(Model-View-Presenter)模式。是将APP的结构分为三层:

view - UI显示层

view 层主要负责:

  1. 提供UI交互
  2. 在presenter的控制下修改UI。
  3. 将业务事件交由presenter处理。
    注意. View层不存储数据,不与Model层交互。

presenter - 逻辑处理层

presenter 层主要负责:

  1. 对UI的各种业务事件进行相应处理。也许是与Model层交互,也许自己进行一些计算,也许控制后台Task,Servic
  2. 对各种订阅事件进行响应,修改UI。
  3. 临时存储页面相关数据。
    注意. Presenter内不出现View引用。

model - 数据层

model层主要负责:

  1. 从网络,数据库,文件,传感器,第三方等数据源读写数据。
  2. 对外部的数据类型进行解析转换为APP内部数据交由上层处理。
  3. 对数据的临时存储,管理,协调上层数据请求。

如图示,里面的activity,presenter,model均为例子:

mvp

将复杂的功能分割为各层内的小问题。各层内功能单一。这样易于功能修改拓展与Debug。
解耦的设计,独立的模块,更有利于分工开发与测试。

简单例子如下

aaarticlea/png;base64,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" alt="" />

UserBean.java

package com.example.mvptest.com.example.bean;

/**
* Created by Administrator on 2016/6/2.
*/
public class UserBean {
private String mobile;
private String userpwd; public UserBean(String mobile, String userpwd) {
this.mobile = mobile;
this.userpwd = userpwd;
} public String getMobile() {
return mobile;
} public String getUserpwd() {
return userpwd;
}
}

Model层

IUserModel.java和UserModel.java

public interface IUserModel {

    void setID(int id);
void setMobile(String mobile);
void setUserPwd(String userpwd);
UserBean load(int id);
}
package com.example.mvptest.com.example.model;

import android.util.SparseArray;

import com.example.mvptest.com.example.bean.UserBean;

/**
* Created by Administrator on 2016/6/2.
*/
public class UserModel implements IUserModel {
private String usermobile;
private String userPwd;
private int mID;
private SparseArray<UserBean> mUserArray = new SparseArray<UserBean>(); @Override
public void setID(int id) {
mID = id;
} @Override
public void setMobile(String mobile) {
usermobile = mobile;
} @Override
public void setUserPwd(String userpwd) {
userPwd = userpwd;
UserBean userBean = new UserBean(usermobile, userpwd);
mUserArray.append(mID, userBean);
} @Override
public UserBean load(int id) {
mID = id;
UserBean userBean = mUserArray.get(mID, new UserBean("no data", "not data"));
return userBean;
}
}

View层

package com.example.mvptest.com.example.view;

/**
* Created by Administrator on 2016/6/2.
*/
public interface IUserView {
int getID();
String getMobile();
String getUserPwd();
void setMobile(String mobile);
void setUserpwd(String userpwd);
}

Presenter层

package com.example.mvptest.com.example.presenter;

import com.example.mvptest.com.example.bean.UserBean;
import com.example.mvptest.com.example.model.IUserModel;
import com.example.mvptest.com.example.model.UserModel;
import com.example.mvptest.com.example.view.IUserView; /**
* Created by Administrator on 2016/6/2.
*/
public class UserPresenter {
private IUserView mUserView;
private IUserModel mUserModel; public UserPresenter(IUserView mUserView) {
this.mUserView = mUserView;
this.mUserModel = new UserModel();
} public void saveUser(int id, String mobile, String userpwd) {
mUserModel.setID(id);
mUserModel.setMobile(mobile);
mUserModel.setUserPwd(userpwd);
} public void loadUser(int id) {
UserBean user = mUserModel.load(id);
mUserView.setMobile("bb"+user.getMobile());
mUserView.setUserpwd(user.getUserpwd());
}
}

Activity层实现IUserView接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener, IUserView{
private EditText mobileEdt, pwdEdt;
UserPresenter presenter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); findViewById(R.id.save).setOnClickListener(this);
findViewById(R.id.load).setOnClickListener(this); mobileEdt = (EditText) findViewById(R.id.mobile);
pwdEdt = (EditText) findViewById(R.id.passwd); presenter = new UserPresenter(this);
} @Override
public int getID() {
return 3;
} @Override
public String getMobile() {
return mobileEdt.getText().toString();
} @Override
public String getUserPwd() {
return pwdEdt.getText().toString();
} @Override
public void setMobile(String mobile) {
mobileEdt.setText(mobile);
} @Override
public void setUserpwd(String userpwd) {
pwdEdt.setText(userpwd);
} @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.save:
presenter.saveUser(3, getMobile(), getUserPwd());
break;
case R.id.load:
presenter.loadUser(3);
break;
default:
break;
}
}
}

复杂例子:
https://github.com/wenhuaijun/SearchPictureTool

 

MVP快速开发框架的更多相关文章

  1. XDroidMvp 轻量级的Android MVP快速开发框架

    XDroidMvp是XDroidAndroid快速开发框架的MVP版本,其使用方式类似于XDroid,大部分源码也来自XDroid. XDroidMvp主要会有这些特性: 无需写Contract! 无 ...

  2. Android快速开发框架ZBLibrary源码分享

    坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI,Data,Listener)以及模板和工具类并规范代码. 封装层级少,简单高效兼容性好.Androi ...

  3. android 快速开发框架

    https://github.com/lipanquan/LPQRapidDevelopmentFramework 依赖LPQLibrary https://github.com/lipanquan/ ...

  4. android悬浮球实现各种功能、快速开发框架、单词、笔记本、应用市场应用等源码

    Android精选源码 悬浮球,实现一键静音,一键锁频,一键截屏等功能 一个Android快速开发框架,MVP架构 Android QQ小红点的实现源码 android一款单词应用完整app源码 an ...

  5. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. Android权限Uri.parse

    1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...

  2. (转载)Linux下IPTABLES防火墙的设定

    (转载)http://www.jefflei.com/post/1760.html 1.iptables防火墙启动和停止 启动iptables防火墙时命令行输入 #service iptables s ...

  3. 使用jconsole检测linux服务器

    在Jboss中运行run.sh的脚本下添加如下信息: #add by step #start JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxre ...

  4. Unity 中关于 BuildSetting 中 “Optimize Mesh Data” 选项的“坑”

    Unity 在底层默认希望为你做尽可能多的优化,降低使用门槛,比如 BuildSetting 中的 Optimize Mesh Data 选项就是一个典型的例子. 这个选项到底有什么用呢?文档描述为: ...

  5. Java基础(二十三)GUI图形界面编程(Java基础完)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  6. jQuery 参考手册 - 效果

    (speed可选:规定动画的速度.默认是 "normal",可能的值:毫秒(比如 1500)"slow""normal""fast ...

  7. OpenCV学习(一)

    环境:OpenCV 2.4.4 VS2010 第一个Demo,显示一张图片 #include "opencv2/highgui/highgui.hpp" int main( int ...

  8. Hadoop-MapReduce之自定义数据类型

    以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置) MR程序就不写了,请看WordCount程序. package cn.genekang.hadoop.m ...

  9. usaco 打扫食槽

    Description 从前奶牛是不挑食的,但现在世道变了,她们变得非常挑剔.牧场里有N头奶牛,约翰 要向她们提供M种食物,第i头奶牛只会吃Pi号食物. 约翰每天都要打扫食槽,这件事非常累.奶牛沿着食 ...

  10. 1629 B君的圆锥

    #include <iostream> #include <queue> #include <stack> #include <cstdio> #inc ...