码迷,mamicode.com
首页 > 移动开发 > 详细

android MVP模式简介

时间:2016-08-01 06:59:12      阅读:413      评论:0      收藏:0      [点我收藏+]

标签:android mvp model view presenter



MVP架构略解:

M--Model,业务层(主要负责具体功能实现)

V--View,视图层(用作显示)

P--Presenter,连接层(搭建Model层和View层通信桥梁)


MVP模式下,Model层和View层是完全隔离(解偶)的,两者的通信都是通过Presenter层作为桥梁来进行通信的,所以,Presenter层中一定含有Model层和View层具体实例(由这可以看出,当界面改变时,只需更改Presenter层中的View实例即可;同理,当数据加载方式改变时,只需更改Presenter层中的Model实例即可.


心得:

要写出MVP架构代码,主要是看M层和V层功能概述:

1.首先看View层,View层主要做显示用,那么,写View层接口的时候,就要考虑下View层有多少种显示需求,从而定义出相应接口.

2.看完View层后,就要考虑下Model层具体业务功能的实现了,实现过程中,有可能处于耗时状态,此时的状态就应该通过某个接口通知到Presenter层,从而让View层也得知,做出相应显示;实现结果成功失败也是如此(也就是说,Model层操作结果要通过Presenter的接口让Presenter知道,从而让View层知道).



eg:界面只有一个TextView用作显示,想假设从网络上下载文件(模拟为加载数据),TextView在下载不同过程进行不同的文字提示.

思路:

1.View层:主要分3个过程:下载时提示,下载成功提示,下载失败提示.

//com.mvp.view

public interface IView

{

void onLoading();

void onSuccess(List<String> data);//数据下载成功后,进行显示

void onFailed();

}

2. Model层:主要进行数据加载

//com.mvp.model

public interface IModel

{

//加载数据可能是异步操作,通过接口回调告知Presenter结果

void loadData(IPresenter listener);

}

//com.mvp.presenter

public interface IPresenter

{

void loadData();//告诉Model开始loadData

void onSuccess(List<String> data);

void onFailed();

void onDestroy();

}



以上,就将通用的MVP接口定义出来的,后续要做的就是针对特定层做出特定实现即可.


//com.mvp.model

public class IModelImpl01 implements IModel

{

@Override

void loadData(IPresenter listener)

{

//do download func,here pausing 10s to imitate the download behav

try{

Thread.sleep(10000);

List<String> data = new ArrayList<String>();

data.add("imitate loading data successfully");

listener.onSuccess(data);

}catch(Exception e)

{

listener.onFailed();

}

}

}

//com.mvp.presenter

public class IPresenterImpl01 implements IPresenter

{

private IView view;

private IModel model;

public IPresenterImpl01(IView view) 

{

this.view = view;

model = new IModelImpl01();

}

@Override

void loadData()

{

if(view != null)

{

view.onLoading();

}

model.loadData(this);

}

@Override

void onSuccess(List<String> data)

{

if(view != null)

{

view.onSuccess(data)

}

}

@Override

void onFailed()

{

if(view != null)

{

view.onFailed();

}

}

@Override

void onDestroy()

{

view = null;

}

}

//com.mvp.view

public class MainActivity extends Activity implements IView

{

private TextView tvShow;

private IPresenter presenter;

@Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tvShow = (TextView)findViewById(R.id.tvShow);

        presenter = new IPresenterImpl01(this);

        presenter.loadData();

    }

@Override

void onLoading()

{

tvShow.setText("onLoading...");

}

@Override

void onSuccess(List<String> data)//数据下载成功后,进行显示

{

tvShow.setText("load data success:"+data);

}

@Override

void onFailed()

{

tvShow.setText("load data failed");

}

@Override

protected void onDestroy() 

{

super.onDestroy();

presenter.onDestroy();

}

}





本文出自 “whatever957” 博客,请务必保留此出处http://whatever957.blog.51cto.com/6835003/1832694

android MVP模式简介

标签:android mvp model view presenter

原文地址:http://whatever957.blog.51cto.com/6835003/1832694

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!