学习android的MVP模式

每一次学习就是成长,每一次成长将会拥有更美好的未来。

不学习的开发者不是一名合格的程序员,终将面临的是被淘汰。

目前二次开发的项目有用到MVP模式,我也很好奇MVP模式到底好在哪里!个人目前所知道的android的设计模式有MVC、MVP、MVVM以及Clean,本章博客我只是初步学习MVP设计模式和记录下来,作为以后开发以及拓展自己的知识领域。

1、首先新建各层的基类接口

(1)新建Model层的基类接口

/**
 * Created by GuoMeng on 2017/3/13.
 * Description Model:用于数据的增删改查等,也包括一些数据对象
 */

public interface BaseModel {
    // 并实现函数回调
    void getData(BaseCallBack callBack);
}
(2)新建View层的基类接口

/**
 * Created by GuoMeng on 2017/3/13.
 * Description View:用于界面的显示与用户操作的接收,在Android里面View通常就是Activity,Fragment。
 */

public interface BaseView {
    void setData(String data);
}

(3)新建Presenter层的基类接口

/**
 * Created by GuoMeng on 2017/3/13.
 * Description Presenter:是View跟Model的“中间人”,接收View的请求后,从Model获取数据交给View。
 */

public interface BasePresenter {
    void onCreate();
    void performOnClick();
}
(4)以及一个回调接口

/**
 * Created by GuoMeng on 2017/3/13.
 * Description Model层通知View的回调
 */

public interface BaseCallBack {
    void onResult(String data);
}
2、继承及实现

(1)Model层

/**
 * Created by GuoMeng on 2017/3/13.
 * Description
 */

public class Model implements BaseModel{

    @Override
    public void getData(BaseCallBack callBack) {
        // TODO: 2017/3/13  可执行耗时操作
        callBack.onResult("我在测试==");
    }
}
(2)Presenter层

/**
 * Created by GuoMeng on 2017/3/13.
 * Description
 */

public class Presenter implements BasePresenter{
    private BaseView baseView;
    private BaseModel model;
    public Presenter(BaseView baseView) {
        this.baseView = baseView;
    }

    @Override
    public void onCreate() {
        // 接口不能直接实例化,通过非抽象类得到实例
        model = new Model();
    }

    @Override
    public void performOnClick() {
        model.getData(new BaseCallBack() {
            @Override
            public void onResult(String data) {
                baseView.setData(data + "拼接则完成数据回调");
            }
        });
    }
}
(3)实现View,布局文件就不贴了,看代码就可知道了

public class MainActivity extends Activity implements BaseView{

    private TextView tvMessage;
    private Button btnSend;
    private BasePresenter basePresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initWidget();
        initData();
        initListener();
    }

    private void initWidget () {
        tvMessage = (TextView) findViewById(R.id.tv_message);
        btnSend = (Button) findViewById(R.id.btn_sent);
    }

    private void initData() {
        basePresenter = new Presenter(this);
        basePresenter.onCreate();
    }

    private void initListener() {
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                basePresenter.performOnClick();
            }
        });
    }

    @Override
    public void setData(String data) {
        tvMessage.setText(data);
    }
}
3、上面只是初步的学习MVP设计模式,有些博客的进阶文章会提到修改回调接口的位置、网络请求的位置会更好,这些知识有待学习,自己也会更新博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值