想必大家都知道MVCMVPMVVM。今天就来探讨一下MVP在安卓中的设计和实现。

首先谈一个需求。

你的boss说,小明去给我写一个程序很简单我提供Person ID 你给我拿出Person的姓名和性别之类的信息。小明忙问boss“老大这个ID和Person是如何关联的是从服务器接口取还是从本地数据库取还是有什么其他规则?”boss说哦等我接个电话,像是老婆打来的。小明呆呆的等着boss接完电话,boss看起来没那么开心,boss说如何关联id和person吗?这个问题业务那边还没确定下来,你先去吧功能实现,怎么取到时候我再告诉你。

小明心中一万个XX马飞过,需求没搞清就让我写代码。于是小明想起了当年在软件学院老师经常说需求是很可怕的东西,小明也想到当年将设计模式的老师,小明也想起来当年考试背诵的一段课文,依赖倒置原则,开闭原则,接口隔离原则等等一大串。小明知道有一种代码有一种模式能很好的应对需求的变化。于是小明查阅各种资料采取了MVP模式编写自己的代码。就这样小明的MVP之旅开始了。

图1.1

如图1.1 View和Presenter双向持有,Presenter持有Model对象注意是单向的,View和Model不会互相有瓜葛。这三个箭头也就是我们今天的梦之鬼索。若果问我,在MVP和MVC两种设计模式中对安卓的影响我肯定要说是Activity。因为Activity在俩中模式中的角色发生了改变。在MVC中Activity扮演controller的角色负责控制,吧xml等划为view。个人觉得这样很牵强很难受因为毕竟大多用系统的view用的xml不是java代码对项目结构的影响很大,你会发现其实你的View很少。好吐槽结束,那么说MVP Activity扮演了View觉得负责视图,将庞大的业务逻辑抽出到Presenter中。就像小明遇到的奇葩需求,不知道Presenter中的逻辑到底如何去写,那么好,我们要拿出我们的圣经,依赖倒置原则,依赖抽象而不依赖具体实现。那么我们只需新建一个接口来声明Presenter应该做什么,至于如何去做再说吧。大家有没有注意到这时候我们的代码设计小明所处的环境达成了一直,没错这就面向对象语言的特质,世间万物皆对象,没错给我一个程序我能抽象整个世界。于是小明弄出了如下的UML图来设计出项目。

终于放出来大招。直接干掉了boss。boss你不是很屌吗?如何获取person信息还不知道?好只要实现iPersonPresenter接口的一切逻辑我都可以。只需新建一个新的PersonPerson实现类。然后修改一处代码,完成依赖注入。那么无论boss如何无理小明只需简单的修改程序代码依旧美丽。

public class MainActivity extends AppCompatActivity implements iPersonView {private TextView textView;private iPersonPresenter personPresenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//依赖注入适应各种逻辑personPresenter=new PersonPresenter(this);textView=(TextView)findViewById(R.id.textview);textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {personPresenter.getPersonByID();}});}@Overridepublic void setPersoninformation(String s) {textView.setText(s);}@Overridepublic int getid() {return 1110;}
}

项目结构如图。

小明很开心,终于学会了MVP设计模式,以后再也不怕改代码了。不过有人要吐槽了,你这样多建立了这么多类不是很复杂吗?我一个Activity全部解决所有问题,我想说Code is Art这不仅仅是科学也是艺术,有人在问接口的意义,我曾看见过有个最简单的说法。你的手机充电器问什么要有Usb接口,为的就是所有有USB接口的设备都可以与你的手机连接,这也应征了刚刚说过世间万物皆对象,没错给我一个程序我能抽象整个世界。手机接口也是就我们程序的接口,只要符合这个接口那么都可以来使用。

项目github源代码https://github.com/AndroidMsky/MVPtest1

欢迎加安卓开发交流群:308372687

博主原创未经允许不许转载。

梦之鬼索MVP模式在Android中的设计和实现相关推荐

  1. MVP模式在Android中的应用之图片展示选择功能的框架设计

    前言:虽然安卓出现的时间比其它平台软件比较晚,但是在我们的安卓开发中,一样可以使用我们所熟知的设计模式来给它一个合理.完善的结构,这样,才可以使我们在平常开发的时候减少冗余代码的发生,真正的提高效率. ...

  2. MVP模式在Android中的应用(附UML高清大图,使用RecyclerView举例)

    传了一张图,图比较大,请移步下载:http://download.csdn.net/detail/u011064099/9266245 在看代码之前,首先简单看一下什么是MVP模式:http://ww ...

  3. mvp模式复用android,MVP模式

    简称:MVP 全称:Model-View-Presenter :MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供 ...

  4. MVP模式在Android实际项目中的应用和优化

    注:本文阅读需要对MVP模式有基本了解. MVP模式已经出现有很长一段时间了,但是火起来是这两年的事情. 关于MVP的概览,介绍,乃至于教程,Demo,实例,网上都有很多,我也有一篇文章专门收录了一些 ...

  5. android中的mvp模式怎么定义,详解MVP模式在Android开发中的应用

    一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Mode ...

  6. android mvp模式例子_Android中mvp模式使用实例详解

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  7. android mvp 利弊,android mvp模式有什么弊端 - 什么是android mvp模式,android mvp模式有什么弊端...

    android mvp模式有什么弊端 才开始学习使用MVP时,看到大家说了很多MVP的优点,代码复用,条理清晰等等.不过我改下来发现,MVP在我看来,最大的优点还是代码解耦,逻辑清晰,至于代码复用,暂 ...

  8. MVP模式在Android项目中的使用

    烦了在Activity中编写太多的代码,该app由我来主导.就选择用MVP模式. 概述 MVP是模型(Model).视图(View).主持人(Presenter)的缩写,分别代表项目中3个不同的模块. ...

  9. 责任链模式在Android中的应用

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 责任链其实在Android中出现的频率还蛮高的,事件传递就是一种责任链机制.接下来我为大家介绍在开发应用时责任链的用处: 1.触摸 ...

最新文章

  1. 分布式一致性算法Raft
  2. Nature Method:HUMAnN2实现宏基因组和宏转录组种水平功能组成分析
  3. Swift3.0语言教程使用指针创建和初始化字符串
  4. 苹果发布会证实,他们把脸部检测技术和ARKit结合在了一起
  5. 8. python list 和 tuple
  6. 数据库设计注意事项和原则
  7. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象...
  8. [渝粤教育] 西北大学 数据结构 参考 资料
  9. BHMS的完整形式是什么?
  10. 6年20多篇重磅论文,27岁浙大女博导太飒了~
  11. 去除UINavigationBar的下边框
  12. ios charts显示固定个数_上次挂在了百度iOS二面不服气, 三月之期已到,这次终于拿下offer!...
  13. 简化异常处理的Throwables类
  14. c语言求阶乘和的流程图_C语言编程实例
  15. 基于hilbert变换的数字信号_通过Hilbert变换实现移相算法
  16. t3财务软件服务器停止运行,用友T3标准版已停止工作应该怎么办
  17. html如何解决412问题,html5-video – 如何修复412(前置条件失败)错误HTML5视频标记
  18. 【bzoj4011】落忆枫音
  19. 威廉玛丽学院计算机专业好吗,威廉玛丽学院计算机专业怎么样?
  20. 彩虹域名授权平台系统正版源码 带下载更新功能

热门文章

  1. sql查询今天,近七天,近一个月,近一年的数量统计
  2. 二维码生成:STM32F407 + LCD屏(GUI)制作二维码
  3. ubuntu-sudo命令
  4. Robust Lane Detection from Continuous Driving
  5. 解除iphone下载200M上限
  6. Skywalking的安装与使用
  7. 爪爪博士:关于猫斑秃和猫藓的具体区别有哪些?
  8. 第1周收录146起融资,国内大额融资集中,资本出海持续火爆 | 潜在周报
  9. MixMatch、UDA、ReMixMatch、FixMatch
  10. matlab improfile用法,MATLAB图像处理基本命令2