Android MVP的一点理解
2016-10-29 21:15
197 查看
最近还好,有点空闲时间来接收一下新东西,毕竟有强大的学习能力才会有立于不败之地发言权嘛,除了吃饭睡觉打篮球之外,别的时间就全来撸代码了…哦,不对…还有一件事,时刻吐槽室友法海禅师..哈哈,不扯淡了..记录下这阵子都干嘛了..
看见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会告诉媒婆,媒婆来负责给男人传达意思…这么一理解,简直不要太简单好吧…代码也是人,何必搞得那么官方呢,,俗一点好啊,接地气也更容易理解..下面来个代码试试??
上面是一个协议类的三个接口,现在我们来实现。
首先我们先来实现model。
model中重写了所实现的接口的两个方法,一个成功一个失败,目前呢,我们模拟的是请求成功,那么好..现在数据请求成功了,有钱呢,但是怎么去给媒婆说我有钱了呢,接下来咱们来看怎么告诉给媒婆.也就是presenter的实现类.
此类是presenter接口的实现类,也就是全世界唯一嘴上具有PS功能的人物—>媒婆了哈…我们来看看,这媒婆到底称职与否…她获得男人的对象,然后通过参数传递进来女人的对象,然后在setShow方法中把男的问清楚之后,直接就给女人把信息返回回去了..总体来说,这媒婆凑活吧..接下来我们来看看大姑凉都做了啥..
此类也就是Activity或者Fragment等等给用户展现的姑娘.我要展示什么那我不管,,我只要数据,只要结果…怎么来的结果我不管,我只管给presenter要就可以了..
然后呢,我们来看看输出结果.
![](https://img-blog.csdn.net/20161029210804140)
OK了..
接下来我们在model中注释掉请求成功,来个请求失败,看Activity这位菇凉怎么展示..看看输出结果
![](https://img-blog.csdn.net/20161029210926087)
到此为止,OK了…
被同事吐槽为我和民工之间只差一顶安全帽,可见我的审美有多么的差,所以呢代码不好看,命名也没有起好,然后MD也用的不熟练,之前都是在自己的QQ空间记录,因为我觉得自己很菜,所以呢不好意思拿出来让大家看,后来呢从开源里面我学习到了很多的东西,大家都是在相互分享,相互学习,没什么拿不出手的,丑就丑吧…只要咱能把思路与逻辑搞明白就好了…本人发表的第一次博客,后续还会有很多很多吧…如果觉得还凑活的话,评论一下也好,点个赞也罢,算是我知道最起码还有人看,哈哈(虽然很丑…)
今天只说了MVP,其余的下次或者下下次慢慢再写吧,每写一篇博客我就要举例子,说实在的,特么的例子也不好找哈,…
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{ @Override public 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你有钱嘛?用接口回调来获得男人是否有钱 @Override public void setShow() { model.isHaveMoney(new OnIsHaveMoneyListener() { //如果有钱,view.show(msg)通知女人,这男的有钱,恩,不错,考虑一下吧... @Override public void haveMoney(String msg) { view.show(msg); } //如果没钱,view.noShow(msg)通知女人,这男的没钱,你自己看着办吧,也许是个潜力股呢哈... @Override public 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; @Override protected 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接口中的两个方法..输出结果,得到男人的答复!! @Override public void show(String msg) { textView.setText(msg); } @Override public void noShow(String msg) { textView.setText(msg); } }
此类也就是Activity或者Fragment等等给用户展现的姑娘.我要展示什么那我不管,,我只要数据,只要结果…怎么来的结果我不管,我只管给presenter要就可以了..
然后呢,我们来看看输出结果.
OK了..
接下来我们在model中注释掉请求成功,来个请求失败,看Activity这位菇凉怎么展示..看看输出结果
到此为止,OK了…
被同事吐槽为我和民工之间只差一顶安全帽,可见我的审美有多么的差,所以呢代码不好看,命名也没有起好,然后MD也用的不熟练,之前都是在自己的QQ空间记录,因为我觉得自己很菜,所以呢不好意思拿出来让大家看,后来呢从开源里面我学习到了很多的东西,大家都是在相互分享,相互学习,没什么拿不出手的,丑就丑吧…只要咱能把思路与逻辑搞明白就好了…本人发表的第一次博客,后续还会有很多很多吧…如果觉得还凑活的话,评论一下也好,点个赞也罢,算是我知道最起码还有人看,哈哈(虽然很丑…)
今天只说了MVP,其余的下次或者下下次慢慢再写吧,每写一篇博客我就要举例子,说实在的,特么的例子也不好找哈,…
相关文章推荐
- 【Android ContentProvider 一】关于ContactsContract.CommonDataKinds.Phone.CONTENT_URI的一点理解
- Android----MVP模式的理解
- MVP的一点理解
- 在Android上实现WLAN的一点理解
- android_mvp理解与代码示例
- 关于Android Webkit的Flash插件加载的一点理解
- Android MotionEvent中getX()和getRawX()区别以及View坐标getLeft(),getTop()一点理解
- Android MVP理解
- Android产品研发(二十五)-->MVC/MVVM/MVP简单理解
- Android 消息机制的一点理解
- [源码]Android-Architecture及对MVP的理解
- Android: 对于Handler的一点理解。
- Android上MVP架构应用的个人理解
- 自己对android开机速度优化的一点理解
- 关于Android 的MVP的理解
- 2.7-3 Android Studio 的Gradle一点理解, 查看gradle 版本和android 插件的版本
- Android性能优化一点理解
- 我对Android中apk文件进行签名的一点理解
- Android中的代码管理和MVP,MVC模式在Android中的使用(重点:理解“高内聚、低耦合”)
- MVP in Android,让Activity更优雅一点。