Android架构模式——mvp

上篇复习了下android的mvc模式,这篇接着复习mvp模式。

1.Model:模型层,负责处理数据的加载或者存储
2.View:视图层,负责界面数据的展示,与用户进行交互
3.Presenter:桥梁,解耦Model和view层,view层需要的数据通过presenter来调用Model层来获取

对比mvc,model层和view层职责没有变,唯一的区别在于presenter和controller,但是咋一看发现这两个的作用好像也差不多,都是控制model和view来显示数据,那么区别到底在哪了??我们来将上一章的项目改造成mvp模式,从代码上来理解!!!

在这里插入图片描述
1.建立IMvpPresenter接口

public interface IMvpPresenter {
    void getResult(String result);
}

2.建立MvpModel

public class MvpModel {

    public IMvpPresenter iMvpPresenter;
    public MvpModel(IMvpPresenter iMvpPresenter){
        this.iMvpPresenter=iMvpPresenter;
    }
    public  void getParm(String url,String id){
        // 创建OkHttpClient.Builder对象
        OkHttpClient.Builder builder = new OkHttpClient().newBuilder() ;
        // 设置拦截器
        builder.addInterceptor(new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                // 设置Header
                Request newRequest = chain.request().newBuilder()
                        .removeHeader("User-Agent")
                        .addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36")
                        .build() ;
                return chain.proceed(newRequest);
            }
        }) ;
        OkHttpClient client = builder.build();

        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        MyService service = retrofit.create(MyService.class);

        service.getInfor(id).enqueue(new Callback<InforBean>() {
            @Override
            public void onResponse(Call<InforBean> call, Response<InforBean> response) {
                InforBean inforBean = response.body();
                if (inforBean.getCode().equals("200")) {
                    Log.e("msg", "成功");
                    iMvpPresenter.getResult(inforBean.getName()+":"+inforBean.getAge());
                } else {
                    Log.e("msg", "失败");
                    iMvpPresenter.getResult("失败");
                }

            }
            @Override
            public void onFailure(Call<InforBean> call, Throwable t) {
                t.getStackTrace();
                Log.e("msg", "连接失败");
                iMvpPresenter.getResult("连接失败");
            }
        });

    }
}

3.建立MvpView

public interface MvpView {
    void showData(String data);
}

4.建立MvpPresenter

public class MvpPresenter implements IMvpPresenter {
    public MvpModel mvpModel;
    public MvpView mvpView;
    public MvpPresenter(MvpView mvpView){
        this.mvpView=mvpView;
        mvpModel=new MvpModel(this);
    }

    public void requestData(String url,String id){
        mvpModel.getParm(url,id);
    }

    @Override
    public void getResult(String result) {
        mvpView.showData(result);
    }

}

5.建立MvpActivity,实现的功能和上一章一样,打开app时显示id=1的数据,点击按钮显示id=2的数据(数据是随手用nodejs写服务端返回的,感兴趣的读者朋友可以去看下我前面的nodejs文章)

public class MvpActivity extends AppCompatActivity implements View.OnClickListener,MvpView{
    TextView tv;
    Button bt;
    MvpPresenter mvpPresenter;
    String url="http://xxxxxx";
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_avtivity);

        tv=(TextView) findViewById(R.id.tv);
        bt=(Button)findViewById(R.id.bt);
        bt.setOnClickListener(this);

        mvpPresenter=new MvpPresenter(this);
        initData();
    }

    public void initData(){
        String id="1";
        mvpPresenter.requestData(url,id);
    }

    @Override
    public void showData(String data) {
        tv.setText(data);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.bt:
                String id="2";
                mvpPresenter.requestData(url,id);
                break;
                default:
                    break;
        }
    }
}

至此一个简单的mvp架构模式的项目就搭建完毕了,从代码上看,区别还是很大,activity成为了view层,MvpView提供了一个展示数据的方法,Model层只和presenter打交道了,完全和view层隔离!!

结语:mvc模式中,model层和view层相互持有,mvp模式中model和view层完全隔离,这是两个模式最大的区别,在实际项目中如何运用还是根据实际情况而定!!

上一篇:Android架构模式——mvc

下一篇:Android架构模式——MVVM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值