android 架构探索,浅谈mvp!

Android架构主要模式有MVC、MVP和MVVM几种,今天这篇文章主要分析一下MVC和MVP的实现方式。

MVC的标准模型如下图所示:

android 架构探索,浅谈mvp!_第1张图片

在Android项目中,一般来说Activity充当了Controller,因此会导致Acitity等控制类的代码臃肿,并且还会导致业务逻辑被耦合进UI层。而MVP架构就可以很好的避免这种问题,MVP将Presenter充当Mdoel和View中介。能有效的降低View的复杂性,避免业务逻辑被塞进去View角色中。

android中的MVP的标准模型图如下图所示:

android官方对于Android架构模式有专门的samples:地址为:https://github.com/googlesamples/android-architecture;

具体实现方式我们可以通过一个例子来了解他。

我们首先定义一个BaseView,代表对View角色的抽象定义。

public interface BaseVIew{

..............

}

在BaseView中我们可以定义基本的接口来代表我们业务中View的共有的特性.

然后我们可以定义具体的View,例如一个展示界面的RecyclerView,它的主要功能是将后台中的数据展示到我们的页面上去,例如我们可以将它命名为DetialRecyclerView

public interface DetialRecyclerView entends BaseView{

public void onFetchedModel(List result);

.............

}

在这个里面我们可以根据不同的特性来定义不同的抽象接口,例如我们定义了一个onFetchedModel这样的接口来代码我们从网络后台后去具体的数据。然后我们在一个Activity中实现这个接口:

public class MainActivity entends Activity implements DeticalRecyclerView{

@Override

public void onFetchedModel(List list){

//这里我们实现更具list加载数据。

}

}

这里可能有的同学要问了,List list中没有数据啊,数据哪里来呢?这我们就要引入Presenter了,让Presenter充当中介,具体实现我们数据的获取,然后传递这个数据。

这个Prisenter要持有我们的View对象来实现关联。但是为了避免造成内存泄漏,例如我们退出了Activity的时候,我们的Presenter还在执行耗时的网络请求,这会导致Activity的内存无法被释放造成内存泄露。因此我们需要定义个含有关联取消关联View角色的基类Presenter;

public abstract class BasePresenter{

T mView;

public void attach(T view){

mView=view;

}

public void detach(){

mView=null;

}

}

然后我们定义一个集成自BasePresenter的DetialPresenter,用这个类来实现我们的业务逻辑

public class DetialPresenter extends BasePresenter{

//实现我们在后台中获取数据然后载入我们的DetialRecyclerView中,主要就是将我们获取的数据回调给我们的View角色

mView.onFetchModel(result);

}

这样我们就实现了一个经典的MVP架构,小伙伴快动手试一试吧!



你可能感兴趣的:(架构)