内容
Android中应用mvp,大概是这样的,为了分担Activity和Fragment的任务,就分离出来了P和M,这两个类呢,M实现了数据获取,P作为V和M通信的中间人,至于V和P之间以及P和M之间是怎么通信的呢,是分别用了一个接口。这两天在学习MVP,理解如上,说明如下。
1.Mode 数据处理模块。独立的用来处理数据的类,或者一部分类。功能一样,都是获取数据的。
2.View 视图,这里应该是指Activity和Fragment。展示数据的页面,Activity和Fragment不再进行复杂的数据处理,只负责展示数据。
3.Presenter 数据中间类 用来处理中间数据,周旋于Mode和View之间。
其实MVP就是三个类之间通过两个接口的回调来传递数据。。。。。个人之见。
定义两个接口CallbackA, CallbackB;
public interface CallbackB{
ObserData(Object obj);//该方法用来传递Mode类获得的数据
}
public interface CallbackA{ setView(Object obj);//设置视图方法,供Activity、fragment实现}
接口有了,下边新建三个类,分别对应M、V、P;
首先应该是V,也就是我们的Activity或者Fragment,该类实现接口CallbackA, 持有Presenter实例。这时候V类就调用presenter.getData()方法来请求数据。如下:
public class V extends Activity implements CallbackA{ Presenter presenter;//持有Presenter实例,用来调用Presenter中获取数据的方法。 presenter.getData();//调用该方法来获取Data. @override setView(Object obj){ //该方法根据obj数据来设置视图。 }}
V大概就是这样,下面是Mode类,该类用于获得数据。跟V没直接关系。Mode类就是普通的Java类,里边会实现一些获取数据的方法,他会持有CallbackB的实例。以便于获取完数据后调用ObserData()方法。Mode类如下:
public class Mode{ CallbackB callbackB; getData(){ //获取数据。真的获取数据。暴露出来给Presenter类调用 } //拿到数据后,调用callbackB的方法,将数据回传到Presenter; callbackB.ObserData(obj);}
V和Mode完事了之后,就是中间类Presenter,这个类既然是中间类(介于V和M之间),所以他需要双向通信。
所以Presenter类
1.持有CallbackA的实例,这样用于调用setView()方法,以保证和 V 类的通信。
2.实现CallbackB接口,用于保持和Mode类的通信,使Mode类获得的数据回传到Presenter
3.持有Mode类的实例,用于调用Mode类中获取数据的方法。
public class Presenter implements CallbackB{ Mode mode; CallbackA callbackA; public void getData(){//getData方法,暴露出来给V调用 mode.getData(); }//CallbackB接口回调,用于接收Mode获取的数据 @override ObserData(Object obj){ callbackA.setView(obj);//拿到数据后,调用callbackA的setView方法,将数据回传到V; }}以上。不知道为什么,就想写篇博客,那就就这样吧。。。。。。。。。。。。。。。。。。。。。