android小白进阶MVP模式开发(三步曲),让你全面理解MVP进阶(二)

上一篇 我已经讲过mvc mvp 以及对比,写的有点累了,但你们就是我的红牛,我的体质能量,我的加多宝,要是女的的话也是可以是我的女朋友,但请你记住,我从不搞基,从不...

Follow Me:

如果仔细看完我上一篇文章的,特别注意下我用“#########” 来区别上一篇剥离出去的Modle

Start:代码来了

I(桥梁):

package com.example.bandofbrotherszts.ztsmvpdemostep1.cantract;

/**
 * Created by BandOfBrothersZTS on 2017/8/22.
 */

public interface LoginInterface {
    /**  #################
     * 为桥梁添加Model */
    interface Model{

        String getData();

    }
    /**
     * 接口View  “即Activity(Fragment)的所实现类“
     */
    interface View{
        //setData方法是为了  Activity实现View接口之后 重载这个方法就可以直接拿到str 给TextView赋值

       void setData(String str);
    };
    /**
     * 接口Presenter 是LoginPresenter的所实现类
     */
    interface Presenter{
        //我们所要做的就是 给一个TextView 赋值,所以Presenter 中需要有一个方法loadData()
        // 调用 model的网络请求
        void loadData();
    };
    /**
     * 温馨提示 :你也可以吧interface Presenter{} 抽象接口换成 abstract class Presenter{}
     * 这样的话Presenter 是LoginPresenter的父类   LoginPresenter extends Presenter 即可
     * 但是本着“单继承,多实现的原则” 我还是喜欢实现  因为你可能还有别的基类对不对
     */
    //TODO  不要问我mvp模式   m层在哪   不要忘了咱们第一步曲 是把m层剥离出去了
    //TODO   但是这并不影响, 因为Model 是通过Presenter来调用的  看看mvc和mvp的对比图就明白了
    //TODO   所以第一步曲的特点在于: 通过Presenter 来直接调用静态类 进行异步请求
}

P:

package com.example.bandofbrotherszts.ztsmvpdemostep1.presenter;

import com.example.bandofbrotherszts.ztsmvpdemostep1.cantract.LoginInterface;
import com.example.bandofbrotherszts.ztsmvpdemostep1.model.LoginModel;

/**
 *Created by BandOfBrothersZTS on 2017/8/22.
 */

public class LoginPresenter implements LoginInterface.Presenter{
    /**
     *View  和   Presenter 是互通的  所以我要通过构造的方式拿到View
     * 拿到View   Presenter就可以调用View中的方法了
     * 嘿嘿,我又污了(拿到房卡  我就可以对里面姑娘为所欲为了!!!)
     */
private LoginInterface.View view;
    /**###########  Presenter 传递信息给Model  所以要拿到它的实例
     * 我直接在presenter 中实例化的  你也可以在Activity实例化,然后通过构造传过来
     */
    private LoginInterface.Model model;

    public LoginPresenter(LoginInterface.View view) {
        this.view = view;
        this.model = new LoginModel();
    }

    /**###########  通过Model 拿到数据
     * 然后通知view层
     */

    @Override
    public void loadData() {
        String str = model.getData();
        view.setData(str);
    }
}

M:

package com.example.bandofbrotherszts.ztsmvpdemostep1.model;

import com.example.bandofbrotherszts.ztsmvpdemostep1.cantract.LoginInterface;

/**
 * Created by BandOfBrothersZTS on 2017/8/22.
 * #############getData()不是静态调用了,是重写方法了
 */

public class LoginModel implements LoginInterface.Model{
    /**
     * 很简单就是网络强求数据,我比较懒所以我伪造一下数据
     */
    public String getData(){

        return "我是伪造的网络请求数据";
    };
}

V:

package com.example.bandofbrotherszts.ztsmvpdemostep1.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import com.example.bandofbrotherszts.ztsmvpdemostep1.R;
import com.example.bandofbrotherszts.ztsmvpdemostep1.cantract.LoginInterface;
import com.example.bandofbrotherszts.ztsmvpdemostep1.presenter.LoginPresenter;
/**
 * Created by BandOfBrothersZTS on 2017/8/22.
 */
public class LoginActivity extends AppCompatActivity implements LoginInterface.View {

    private LoginInterface.Presenter mPresenter;
    private TextView dataTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        /**
         * 注意了::::::::::::
         * 向下转型 实例化LoginPresenter
         * 为什么这么写?  因为LoginInterface才是桥梁!!!
         */
        mPresenter = new LoginPresenter(this);
    }
    private void initView() {
        dataTv = (TextView) findViewById(R.id.data_tv);
        dataTv.setOnClickListener(new View.OnClickListener() {//点击请求数据
            @Override
            public void onClick(View v) {
                mPresenter.loadData();
            }
        });
    }
    @Override
    public void setData(String str) {
        dataTv.setText(str);
    }


}

END:

总结: 每个人都有自己的mvp,你的参阅让我倍感荣幸,希望你也能找到自己的mvp,如需帮助,或有志同道合者想一起进步的, 加qq群:659014357

最后我附上github源码连接 : MVP(二)源码                                   



               

你可能感兴趣的:(Android开发模式)