前言
MVP是根据MVC演变而来,类似的设计模式还有MVVC(model,view,viewmodel) . 暂时未分清楚MVC与MVP的区别.也没有找到严谨的MVP的定义.根据网上的资料以及Goggle的demo,自己定义进行了MVP设计,用来解决Activity过于庞大的问题。
MVP设计
首先定义三个部分 Model,View,Presenter.
View ,Presenter 各自定义接口,IView IPresenter.
public interface IVideoPlayerPresenter {
public void loadData();
//点击关注
public void clickFollow();
//点击喜欢
public void clickLike();
}
public interface IVideoPlayerView {
void bindData(VideoPlayerPageEntity entity);
void showLoading(boolean show);
//设置关注状态
void setFollow(boolean follow);
void setLike(boolean like);
-
View
Android 中Acitivity或者Fragment实现IView接口,扮演View角色
public class VideoPlayerActivity extends BaseActivity implements View.OnClickListener,IVideoPlayerView
在onCreate()函数中初始化presenter,并且加载数据
presenter = new VideoPlayerPresenter(this,client);
presenter.loadData();
-
Presenter
Presenter中完成数据的加载以及逻辑的处理,在构建函数中保存IView引用,用来与View交互
public class VideoPlayerPresenter implements IVideoPlayerPresenter{
public VideoPlayerPresenter(IVideoPlayerView videoPlayerView ) {
this.videoPlayerView = videoPlayerView;
}
@Override
public void loadData() {
videoPlayerView.showLoading(true);
DataManager.getData(url);
}
-
Model
Model主要进行获取、保存、修改数据等功能,可以定义全局的DataManager进行封装。如果数据结构简单,也可以省略Model实现,直接在Presenter中进行数据操作。
总结
这样实现MVP未必“规范” , 但是任何设计都是为了解决问题。该方式可以将业务、数据、UI进行解耦,程序结构清晰,方便测试。即可满足现阶段需求。
当日后程序更为庞大,业务更为复杂, 再使用其他方式进行重构。