参考大佬写的文章:https://www.jianshu.com/p/f17f5d981de7
1、MVC模式
Model:模型层,根据业务模型建立相关的数据类,同时相关的数据库操作和网络也在Model中进行。
View:视图层,一般用xml文件描述,用于view的展示
Controller:控制层,负责逻辑业务的处理;连接View层和Model层,完成View层和Model层的交互。
这么说太抽象了,我们举个栗子:
点击按钮数字增加
Model层就是数字的保存和更新,更新通知的是Activity,View层就是对应布局的xml文件,Activity充当Controller层,它接收view层的点击,然后通知model层你该增加了。
大佬的图特别直观:
- 优点
View层和Model层解耦,通过Controller层来进行联系
职责划分明确,有利于代码的维护 - 缺点
Activity除了要连接View层(加载布局、接受用户操作),还要承担Controller层的职责(业务逻辑的处理)。它和View,Model层是有交互的,并没有做到完全分离,会产生耦合。
界面变多或者逻辑太复杂,Activity会不堪重负。
2、MVP模式
大家用的基本上都是它。为了分离Activity中的View层和Controller层,又进一步对Activity做了瘦身。
Model:模型层,负责存储、检索、操纵数据。
View:视图层,负责界面数据的展示,与用户进行交互。
Presenter:呈现层,连接View层和Model层,处理业务逻辑。
我们还是举这个例子:
点击按钮数字增加
Model负责数据的保存和更新,更是通知的是Presenter。(在MVC模式中通知的是Activity,也就是Controller,但是在Actvity中还是和View发生了交互,而这里不会)
View层是Activity,同时持有Presenter的引用。
Presenter层是接口,负责业务逻辑处理。
- 优点
① 通过Presenter实现数据与视图之间的交互,完全隔离了View层和Model层。
② 对Activity成功进行了瘦身。
MVC和MVP模式的区别
3、MVVM模式
Model:模型层,负责处理数据的加载或存储。
View:视图层,负责界面数据的展示,与用户进行交互。
ViewModel:视图模型,负责完成View于Model间的交互,负责业务逻辑。
这三种模式的定义都差不多,但是它的内部实现不一样。
- 优点
Model层和View层耦合进一步降低 - 缺点
程序难以调试,界面出现异常时,可能是View的问题,也肯是Model的问题,定位出异常比较困难。