Android架构主要模式有MVC、MVP和MVVM几种,今天这篇文章主要分析一下MVC和MVP的实现方式。
MVC的标准模型如下图所示:
在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
.............
}
在这个里面我们可以根据不同的特性来定义不同的抽象接口,例如我们定义了一个onFetchedModel这样的接口来代码我们从网络后台后去具体的数据。然后我们在一个Activity中实现这个接口:
public class MainActivity entends Activity implements DeticalRecyclerView{
@Override
public void onFetchedModel(List
//这里我们实现更具list加载数据。
}
}
这里可能有的同学要问了,List
这个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架构,小伙伴快动手试一试吧!