今天偶然看到一篇博客:http://zjutkz.net 中的《教你认清MVC,MVP和MVVM》。
说实话:MVC还是模模糊糊,MVP只是听说过,MVVM是第一次听说。好吧,为了不那么落伍,就详细看了看。因为各种原因,目前只看到了MVP
首先理解MVC:
Model--View--controller
Model:就是数据bean
View:就是布局文件中的view,也就是各种View和ViewGroup
controller:就是控制器,就是Activity
控制器控制数据在view上的展示
这种情况下View与controller是相互关联的:因为我们一般在activity中操作数据和view。
(其实真实的mvc应该是控制器操作数据,view只管view,不管操作数据的)
MVP:
MVP模式就是将view与controller解耦。
MVP核心思想:将UI部分抽象为View接口,将controller部分抽象成presenter接口,Model还是原来的model
这样,Activity不操作数据。只负责处理生命周期相关View
(后台引用数据的时候,不会因为数据在Activity中操作而占用Activity不能被回收)
也就是说从传统的Activity中可以抽离出两个接口:View接口和Presenter接口
那么有接口就要有实现:
View接口的实现就是Activity或者Fragment;
Presenter的实现就是自定义的一个子类
View接口要定义对view的操作。如显示,隐藏,赋值等
Presenter接口主要定义对数据的操作。然后通过调用View的方法将数据与view关联
那么presenter的实现类里面还是要有View接口的对象的
数据就在Presenter里面获取,数据的操作就在Presenter里面做。数据与View的关联通过调用View接口对象的方法做。既然要通过调用View接口的方法,也就是说要对View要进行的操作都还是要在View接口中定义的。
尝试一下下来的总结是:
View接口定义对View的操作,要在子类(Activity或者Fragment)中实现操作
Presenter接口定义对数据和View的操作,在子类中实现
在View中调用presenter对象的方法,而Presenter对象中的实现都是通过获取的View对象调用的View中的方法。到这里一目了然:就是各种回调
重点其实是在Presenter中操作数据,然后通过调用View对象的方法将数据与View关联
参考的博客:
http://blog.csdn.net/lmj623565791/article/details/46596109
https://segmentfault.com/a/1190000003927200
http://zjutkz.net