注意点:

  1. IView和IModel是顶层接口,接口中没有任何方法,用于多态。
  2. SingleInterfaceContract中View和Presenter接口以及ISingleInterfaceModel三个接口定义了MVP三层需要实现用于对方调用的方法。
  3. V层的基类BaseMVPActivity持有P层的对象,该对象在实现类中初始化,V层需要获取数据只要调用该对象2中对应的方法即可。
  4. P层的基类BasePresenter持有V层的对象,该对象在V层调用attach方法的时候初始化,P层需要返回数据只要调用该对象2中对应的方法即可。
  5. P层的实现类SingleInterfacePresenter持有M层的对象,该对象在P层实现类构造函数初始化,在V层需要获取数据后,P层调用该对象2中对应的方法并把返回的数据返回给V层。
  6. 对于上述三个主要接口,V层和M层接口用于P层调用,P层接口用于V层调用。

先从Model层说起,IModel和IView是顶层接口,只是一个空接口,用作中间层泛型使用:

IModel:

public interface IModel {}

IView:

public interface IView {}

蓝色的中间层接口定义了MVP三层相互调用的接口

MultipleInterfaceContract:

public interface MultipleInterfaceContract {interface View extends IView {String presenterGetDataFromView();}interface Presenter {String viewGetDataFromPresenter(int viewDataIndex);}
}

ISingleInterfaceModel

public interface ISingleInterfaceModel extends IModel {String sendDataFromModelToPresenter(String dataIndex);
}

三层的中间层接口对应的方法全都有最底层的实现类实现

SingleInterfaceActivity

public class SingleInterfaceActivity extends BaseMVPActivity<SingleInterfacePresenter> implements SingleInterfaceContract.View {private Button button;private TextView textView;@Overrideprotected SingleInterfacePresenter createPresenter() {Log.d("MvpDemo", "createPresenter");return new SingleInterfacePresenter();}@Overrideprotected void init() {setContentView(R.layout.activity_single_interface);button = findViewById(R.id.button);textView = findViewById(R.id.textView);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {textView.setText(mPresenter.sendDataFromPresenterToView());}});}@Overridepublic String presenterGetDataFromView() {return "book";}
}

SingleInterfacePresenter

public class SingleInterfacePresenter extends SingleBasePresenter<SingleInterfaceContract.View> implements SingleInterfaceContract.Presenter{private final SingleInterfaceModel singleInterfaceModel;public SingleInterfacePresenter() {this.singleInterfaceModel = new SingleInterfaceModel();}@Overridepublic String sendDataFromPresenterToView() {String dataIndex = mView.presenterGetDataFromView();return singleInterfaceModel.sendDataFromModelToPresenter(dataIndex);}
}

SingleInterfaceModel

public class SingleInterfaceModel implements ISingleInterfaceModel{Map<String, String> hashMap = new HashMap(){{put("book", "this is book in model.");put("pen", "this is pen in model");put("desk", "this is desk in model");}};@Overridepublic String sendDataFromModelToPresenter(String dataIndex) {return hashMap.get(dataIndex);}
}

接下来再介绍中间层,中间层主要作用是建立MVP三层之间的联系,由于V和P层相互持有对方对象,而P和M层之间只有P层单方向持有M层对象,因此M层不需要中间层。

BaseMVPActivity

public abstract class BaseMVPActivity<T extends IPresenter> extends AppCompatActivity implements IView {protected T mPresenter;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);initPresenter();init();}protected void initPresenter() {mPresenter = createPresenter();if (mPresenter != null) {mPresenter.attachView(this);}}@Overrideprotected void onDestroy() {if (mPresenter != null) {mPresenter.detachView();}super.onDestroy();}protected abstract T createPresenter();protected abstract void init();
}

SingleBasePresenter

public abstract class SingleBasePresenter<T extends IView> implements IPresenter<T> {protected T mView;@Overridepublic void attachView(T view) {Log.d("MvpDemo", "attachView");if (view == null) {Log.d("MvpDemo", "mView is null");}mView = view;}@Overridepublic void detachView() {mView = null;}@Overridepublic boolean isViewAttached() {return mView != null;}
}

V和P层都在中间层持有了对方的对象,其中V层通过在实现类中新建P层对象,同时调用P层的attach方法建立双向连接,因此P层需要对应的绑定相关接口来供V层调用,也就是IPresenter

IPresenter

public interface IPresenter<T extends IView> {void attachView(T view);void detachView();boolean isViewAttached();
}

Android Mvp架构详解相关推荐

  1. Android SystemUI 架构详解

    Android SystemUI 架构详解 本文描述Android系统中一个核心应用SystemUI,详细赘述SystemUI中几大模块功能的实现过程.由于作者水平有限,如发现本文中错误的地方,欢迎指 ...

  2. Android官方MVP架构详解

    综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...

  3. Android MediaRecorder架构详解

    1. 简介 在android中录制音频有两种方式,MediaRecorder和AudioRecord.两者的区别如下: (1) MediaRecorder 简单方便,不需要理会中间录制过程,结束录制后 ...

  4. Android视图架构详解

    作者: ztelur 联系方式:segmentfault,csdn,github 转载请注明原作者.文章来源,链接,版权归原文作者所有.  最近一直在研究View的绘制相关的机制,发现需要补充一下An ...

  5. Android 视图架构详解

    转自:http://android.jobbole.com/84519/ Activity,DecorView,PhoneWindow和ViewRoot的作用和相关关系 Android View Ar ...

  6. 2022最新Android面试题目解答,Android MVP模式详解

    开头 Android开发,假如开始没有任何的开发经验的话, 千万不要着急,不要想着在短时间内就把一个语言学习好, 因为你之前没有任何的学习经验, 在这个过程中需要有耐心地学习完JAVA的基础知识, 然 ...

  7. android vold 加密,android vold架构详解(1)

    首先上一张整体的结构类图 VOLD:Volume Daemon存储守护进程,用来为响应Usb/SD卡插入,拔出等动作提供服务. 系统启动时,通过解析init.rc文件来启动各种系统服务. 包括VOLD ...

  8. google官方mvp+dagger2架构详解

    原文链接:http://www.jianshu.com/p/01d3c014b0b1 1 前言 前段时间分享了一篇文章:google官方架构MVP解析与实战 ,针对这是对google官方示例架构的一个 ...

  9. Android开发入门一之Android应用程序架构详解

    Android应用程序架构详解如下: src/ java源代码存放目录 gen/自动生成目录 gen 目录中存放所有由Android开发工具自动生成的文件.目录中最重要的就是R.java文件.这个文件 ...

  10. Android LiveData组件详解以及LiveDataBus

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/99749323 本文出自[赵彦军的博客] 一.LiveData简介 LiveDat ...

最新文章

  1. mac安装opencv
  2. java操作samba_使用Java和Samba JCIFS访问文件
  3. Rails + React +antd + Redux环境搭建
  4. java utf8 转换al32utf8_java与Unicode
  5. c#,xp系统,Matlab6.5
  6. linux mysql主从配置
  7. WinAPI: SetTextColor - 设置设备环境的文本颜色
  8. 如何使用给定的部分名称杀死所有进程?
  9. stata中计算公式命令_Stata:runby - 一切皆可分组计算!
  10. html javascript 表格id,javascript 获取表格中元素id的实现代码
  11. 如何使用小米手机的便签功能
  12. 原型图与Axure基础
  13. mysql case when in_MySQL case when 使用
  14. VSCode 中怎样快速切换多个项目
  15. dlink 备份文件_D-Link路由器备份路由器配置信息教程
  16. 遥感数据在植物识别的应用
  17. leetcode 1313. Decompress Run-Length Encoded List(python)
  18. STM32F1XX的GPIO的8种工作模式以及GPIO的寄存器简介
  19. 豆瓣 9.3 的高分,牛逼的 Git!
  20. Maltego 版本类型重新选择

热门文章

  1. C51单片机串口通信之上位机交互
  2. 基于移动互联网的交互式卫星地面管理终端
  3. Fences 2.1 - 高效实用的桌面图标栅栏分类管理软件神器 (桌面图标再多也不会乱)
  4. 分享一个WIN10可用的桌面图标栅栏管理插件Fences的破解版
  5. 虚拟偶像发展史:TA们到底如何成功?万字复盘
  6. mysql emoji表情_mysql utf8mb4与emoji表情
  7. 使用bus hound发送包的方法
  8. V360i手机相关软件全面介绍(附下载)
  9. 遥感原理与应用总结——第五章:遥感图像几何处理
  10. IntelliJ IDEA下载 与 破解(Evaluate for free 灰色)