androidMVP模式简介

MVP架构略解:

五华网站建设公司成都创新互联,五华网站设计制作,有大型网站制作公司丰富经验。已为五华上1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的五华做网站的公司定做!

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 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 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 data = new ArrayList();

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 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 data)//数据下载成功后,进行显示

{

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

}

@Override

void onFailed()

{

tvShow.setText("load data failed");

}

@Override

protected void onDestroy() 

{

super.onDestroy();

presenter.onDestroy();

}

}


当前名称:androidMVP模式简介
文章位置:http://scyanting.com/article/ijopdo.html