最近还好,有点空闲时间来接收一下新东西,毕竟有强大的学习能力才会有立于不败之地发言权嘛,除了吃饭睡觉打篮球之外,别的时间就全来撸代码了…哦,不对…还有一件事,时刻吐槽室友法海禅师..哈哈,不扯淡了..记录下这阵子都干嘛了..

 MVP + Retrofit + OKHttp + RxAndroid + Glide + Picasso + cardView + RecycleView + Material Design + ...等等的,安卓现在主流框架基本上来讲就这么多吧..(其实还有很多很好的,只是还没有发现而
已)现在逐个来记录一下自己的理解..首先,MVP模式..

看见MVP这三个字母我就觉得麦迪时刻来了..哈哈,最有价值球员哈,当然这是相对于NBA来讲..Android中MVC更像NBA中的MVP,其中MVC中的Activity和Fragment就相当于NBA中的MVP吧,因为啥都是我自己来,举个例子就是既当爹也要当妈,而用MVC模式还是比较好的,最起码数据请求的类还是分开的!

而有很多情况下呢,撸代码的时候都是一大坨一大坨的撸,也就是说在一个activity或者Fragment中直接上,你要啥我就给你弄啥,咋了?听说你要数据?你稍等,我这就写,啪啪啪啪,一大坨出来了..啥?听说你要更新UI,你稍等,啪啪啪啪一大坨又出来了..啥?听说你要对各种数据来进行判断,区分与筛选,那您稍等,啪啪啪啪的一大坨又出来了..

艾玛,这有bug了的话,找代码找的人是嘴歪眼斜,吐完再吐,自己写的倒还罢了,别人写的,你来找或者你写的别人找..来啊,互相伤害啊…这是目前的这些模式的一些不足的地方..所以产生了个叫做MVP的东西,

这个东西呢,我喜欢形象一点的,喜欢举例子来理解,MVP举个例子就是,M层就是Model层,男人就是Model层,这层干啥的呢?哈哈,简单,这层就是提供钱的,V层就是View层,这层又是干啥的呢,哈哈,简单,女人就是View层,P层就是presenter,这层呢,哈哈,简单,这层就是媒婆层….为啥举这个例子,,听完我的解释,你会觉得我太有才了..哈哈…男人负责给钱,女人来负责化妆让自己更漂亮,但是呢她俩比较害羞,并不会直接联系,男人不会直接给钱到女人手里,当然作为新时代的独立化女性也不好意思给男人要么,,这时候中间人出现了,就是媒婆.男人把钱给媒婆,媒婆把钱给女人..女人要买iPhoneN会告诉媒婆,媒婆来负责给男人传达意思…这么一理解,简直不要太简单好吧…代码也是人,何必搞得那么官方呢,,俗一点好啊,接地气也更容易理解..下面来个代码试试??

首先来个接口(你妹啊,上来就接口?哈哈,别捉急么,慢慢来,步子大了容易扯到蛋哈)
package text.scc.com.custompulltorefresh.contract;/*** Created by scc on 2016/10/29.*//*** 此接口为一个协议接口,个人觉得主要目的就是避免日后的接口过于多,* 所以一个接口来对应的三个绑定在一起的人.*/
public interface Contract {public interface View{void show(String msg);  //此方法来显示姑娘要买的东西(比如说iPhoneN) msg是男士给钱成功了.void noShow(String msg);//此方法来显示姑娘要买的东西(比如说iPhoneN) msg是男士可能在闭关,没钱给,
}public interface Presenter{void setShow();     //媒婆这里就一个方法,有钱了我就给那姑娘钱,没钱了我也给你一句话(那男的没钱-.-)}public interface Model{void isHaveMoney(OnIsHaveMoneyListener listener); //男人这里是否有钱可以给那个姑娘}

上面是一个协议类的三个接口,现在我们来实现。
首先我们先来实现model。

package text.scc.com.custompulltorefresh.model;import text.scc.com.custompulltorefresh.contract.Contract;/**
* Created by scc on 2016/10/29
*/public class ModelImpl implements Contract.Model{@Overridepublic void isHaveMoney(OnIsHaveMoneyListener listener) {/*** 此处网络请求代码省略,简单模拟一下*///首先假设网络请求成功,那么我们把底下的没有成功注释掉运行一下listener.haveMoney("我没钱,但是愿意割肾给哪位菇凉买iPhoneN");//假设网络请求没有成功,那么我们把上面的成功的注释掉运行一下
//        listener.noHaveMoney("我没钱,买不起,你和能买得起的谈恋爱去吧...");}
}

model中重写了所实现的接口的两个方法,一个成功一个失败,目前呢,我们模拟的是请求成功,那么好..现在数据请求成功了,有钱呢,但是怎么去给媒婆说我有钱了呢,接下来咱们来看怎么告诉给媒婆.也就是presenter的实现类.

package text.scc.com.custompulltorefresh.presenter;import text.scc.com.custompulltorefresh.contract.Contract;
import text.scc.com.custompulltorefresh.model.ModelImpl;
import text.scc.com.custompulltorefresh.model.OnIsHaveMoneyListener;/**
* Created by scc on 2016/10/29
*/public class PresenterImpl implements Contract.Presenter{//媒婆此处声明了男人与女人的各自的接口private Contract.Model model;private Contract.View view;//媒婆在自己的构造方法中new出了男人的对象,那么女人的对象就不是new出来的啦,是通过构造方法的参数传递进来的public PresenterImpl(Contract.View view) {this.view = view;model = new ModelImpl();}//此处重写了接口中的setShow方法,调用model的引用,也就是问男人isHaveMoney你有钱嘛?用接口回调来获得男人是否有钱@Overridepublic void setShow() {model.isHaveMoney(new OnIsHaveMoneyListener() {//如果有钱,view.show(msg)通知女人,这男的有钱,恩,不错,考虑一下吧...@Overridepublic void haveMoney(String msg) {view.show(msg);}//如果没钱,view.noShow(msg)通知女人,这男的没钱,你自己看着办吧,也许是个潜力股呢哈...@Overridepublic void noHaveMoney(String msg) {view.noShow(msg);}});}
}

此类是presenter接口的实现类,也就是全世界唯一嘴上具有PS功能的人物—>媒婆了哈…我们来看看,这媒婆到底称职与否…她获得男人的对象,然后通过参数传递进来女人的对象,然后在setShow方法中把男的问清楚之后,直接就给女人把信息返回回去了..总体来说,这媒婆凑活吧..接下来我们来看看大姑凉都做了啥..

package text.scc.com.custompulltorefresh;import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;import text.scc.com.custompulltorefresh.contract.Contract;
import text.scc.com.custompulltorefresh.presenter.PresenterImpl;/*** Created by scc on 2016/10/29.*/
public class MVPActivity extends AppCompatActivity implements Contract.View{private TextView textView;//声明一下媒婆阿姨的对象private Contract.Presenter presenter;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mvp_act);textView = (TextView) findViewById(R.id.mvp_text);//此处把媒婆阿姨new出来,把自己传进媒婆的构造中,媒婆哪里就也有了自己的一个分身了..presenter = new PresenterImpl(this);//然后问阿姨啥情况,媒婆自己说我有个setShow方法,你自己看吧presenter.setShow();}//然后此处重写了view接口中的两个方法..输出结果,得到男人的答复!!@Overridepublic void show(String msg) {textView.setText(msg);}@Overridepublic void noShow(String msg) {textView.setText(msg);}
}

此类也就是Activity或者Fragment等等给用户展现的姑娘.我要展示什么那我不管,,我只要数据,只要结果…怎么来的结果我不管,我只管给presenter要就可以了..
然后呢,我们来看看输出结果.

OK了..

接下来我们在model中注释掉请求成功,来个请求失败,看Activity这位菇凉怎么展示..看看输出结果

到此为止,OK了…

被同事吐槽为我和民工之间只差一顶安全帽,可见我的审美有多么的差,所以呢代码不好看,命名也没有起好,然后MD也用的不熟练,之前都是在自己的QQ空间记录,因为我觉得自己很菜,所以呢不好意思拿出来让大家看,后来呢从开源里面我学习到了很多的东西,大家都是在相互分享,相互学习,没什么拿不出手的,丑就丑吧…只要咱能把思路与逻辑搞明白就好了…本人发表的第一次博客,后续还会有很多很多吧…如果觉得还凑活的话,评论一下也好,点个赞也罢,算是我知道最起码还有人看,哈哈(虽然很丑…)

今天只说了MVP,其余的下次或者下下次慢慢再写吧,每写一篇博客我就要举例子,说实在的,特么的例子也不好找哈,…

Android MVP的一点理解相关推荐

  1. Android MVP 详解(上)

    作者:李旺成 时间:2016年4月3日 "Android MVP 详解(下)"已经发布,欢迎大家提建议. MVP 在 Android 上的使用其实已经有挺长一段时间了,长到似乎有点 ...

  2. android mvp模式例子_ANDROID MVP 模式 简单易懂的介绍方式

    Android MVP Pattern Android MVP 模式1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式.当项目越来越庞大.复杂,参与的研发人员越来越多的时候,MVP ...

  3. Android MVP架构从入门到精通-真枪实弹

    Android MVP架构从入门到精通-真枪实弹 一. 前言 二. MVC架构 1. MVC架构优缺点 A. 缺点 B. 优点 三. MVP架构 1. MVP架构优缺点 A. 缺点 B. 优点 四. ...

  4. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  5. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  6. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  7. 对 AbsoluteLayout 的一点理解

    菜鸟记录一下,把之前的笔记抄到这里 /*** A layout that lets you specify exact locations (x/y coordinates) of its* chil ...

  8. Android MVP(三)内存泄漏分析与动态代理

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  9. Android MVP(四)运用反射配置泛型 Model

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

最新文章

  1. 2-RACommand
  2. Android Gradle 配置Java src目录、Res 目录
  3. 网站优化之尽量避免重定向(301/302)
  4. 支付业务流程图--扫码付
  5. UOJ - #117. 欧拉回路(模板)
  6. LeetCode MySQL刷题——day2
  7. ddt python_python-ddt实践
  8. 定时器驱动数码管c语言程序,用c语言编写,实用定时器实现数码管15倒计时
  9. 2699!Redmi Note 11潮流限定版再次发售:全球首发“全系悬浮工艺”
  10. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  11. 美国之行---领略真正的美国文化--牛排
  12. MFC对话框标题栏颜色自绘,标题栏由过渡色组成,自绘关闭按钮
  13. 华为云桌面,带你见识不一样的系统桌面
  14. 阿里云直播服务开通配置流程
  15. 玩了下朋友刚买的iphone4s,太鸡冻了,太幸福了
  16. 李博轩现就职于西部电影集团艺创中心,国家三级摄影师
  17. 阻碍你成功的五个不良习惯
  18. 让工作效率至少快一倍的秘诀:清单革命
  19. 面试秘籍 | 测试工程师的简历该怎么写?(带样例)
  20. 华为u8825d手机root和google play安装有教程和相关文件

热门文章

  1. 激光打印机常见加粉问题与使用技巧
  2. CSS中的position:absolute与relative
  3. 计算机电源已接通但未充电,笔记本电源,详细教您电源已连接未充电怎么解决...
  4. FANUC机器人通过PNS功能实现自动运行
  5. Zcash中的description
  6. Cookie、Session、本地存储
  7. JavaScript最大的秘密
  8. 《WEB安全深度学习实战》笔记
  9. 综述论文要写英文摘要吗_英文论文的写作讲解 写好英文论文要注意这三点
  10. 2011年网页设计发展趋势