Android 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,其余的下次或者下下次慢慢再写吧,每写一篇博客我就要举例子,说实在的,特么的例子也不好找哈,…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值