Mvp模式在Android开发中的应用

时间:2021-08-22 21:13:57

前言

对于将目标选定在Android端想更进一步的学习的同学来说,对于一些通用的设计模式的使用是必不可少的。尤其是对于大部分习惯于将逻辑代码写在Activity内的同学来说,希望看完这篇文章以后能参照这种分层解耦的方式的或者其它一些优秀的模式(例如MVVM)来进行代码的编写,养成一个良好的编码习惯。

MVP结构

Mvp模式在Android开发中的应用

  1. Model层:
    Model层负责数据的获取,例如从网络中加载的数据,本地数据库取出的数据等,总之这里的数据只由Model层负责提取,数据以参数的方式进行传递。
  2. View层:
    这里的view层只负责界面的展示工作,当然包括一些加载动作、动画等,总之所有界面上呈现的效果都由view层维护,与数据和业务逻辑分离(这里的分离不是说完全没有业务逻辑,比如adapter的绑定等是一定需要的,但是这种逻辑属于展示层逻辑)。
  3. Presenter层:
    从上面的图中可以看到,View层和Model层是没有关联关系的,这也就意味着它们之间没有办法直接进行数据的交互,所有的数据传递都要依赖Presenter层,而这里的Prenster层和View层是相互持有对方引用的,Model层也被Prenster层持有引用从而方便进行数据交互。
  4. Listener层:
    Mvp模式中其实是没有这一层的,只是按我个人的理解,觉得这个listener有必要讲一下。Listener定义在model中,当model执行数据完毕会回调listener从而进行数据传递,listener的实现则需要在view加载画面的时候执行回调。

代码

根据设计模式的面向接口编程原则,model层和view层都有一个公共的接口,具体代码如下:

  1. model层接口:
    Mvp模式在Android开发中的应用

  2. view层接口:
    Mvp模式在Android开发中的应用

  3. Prenster类:
    Mvp模式在Android开发中的应用

  4. Model实现类:
    Mvp模式在Android开发中的应用
    5.View实现类:
    Mvp模式在Android开发中的应用

效果图

Mvp模式在Android开发中的应用

结语

到这里,Mvp模式的一个demo就写完了,其实效果跟直接写在activity中没什么区别,性能可能还要稍微差一点,但是这里对view层和model层的充分解耦从而实现数据层、逻辑层和展示层的完全解耦和各接口的可扩展性确实要比之前那种堆在activity要好很多,如果之后数据要从网络获取,添加一个继承类,改一下Prenster类中Model的实现类就可以,或者通过反射的方式在配置文件中获取,总之中间的方式没什么区别,但这种解耦带来的开发和维护的好处确实很多。