温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

android MVP模式简介

发布时间:2020-04-04 20:17:26 来源:网络 阅读:1088 作者:whatever957 栏目:移动开发



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();

}

}





向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI