MVC
![a8dd51949c6abb340a3849213a81a275.png](https://i-blog.csdnimg.cn/blog_migrate/f394e5b9e234b373d2bea66d7c23cc17.png)
Model:实体类
View:xml
Controller:activiity
优点:
耦合性低:视图层和业务层分离
重用性高:当业务逻辑变更的时候,不需要变更View和Model,只需要更换Controller
缺点:
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的。
MVP:
![6308f2d5b71f70346c80a75c69775bde.png](https://i-blog.csdnimg.cn/blog_migrate/0b09e22510febc30c839920ae12f6a69.png)
Model:主要提供数据存取功能。
View:可能是指Activity、Fragment或者View。
Presenter:通过Model存取数据,连接View和Model,从Model中取出数据交给View。
构造方式:
1. 设定BaseView 和BasePresenter
2. 定义抽象接口分别继承以上的接口,制定我们view和presenter中的方法。
3.设置model类来获取数据。
4.新建presenter类实现接口中的presenter接口,获取view 和model的对象,实现逻辑业务
5.activity实现接口中的view接口,获取presenter对象,通过调用presenter实现view中的方法
优点:
1.降低了耦合度,实现了model和view的完全分离
2.Presenter 可以复用,一个 Presenter 可以用于多个 View,而不需要更改 Presenter 的逻辑
3.View 可以进行组件化,在MVP当中,View 不依赖 Model
缺点:
1.Presenter 中除了应用逻辑以外,还有大量的 View->Model,Model->View 的手动同步逻辑,造成 Presenter 比较笨重,维护起来会比较困难;
2.Presenter 与特定的视图的联系过于紧密,一旦视图需要变更,那么Presenter也需要变更了。
MVVM
![bb7b1fd0fd3e0591db5845a1060d1df7.png](https://i-blog.csdnimg.cn/blog_migrate/d0c009b6c6ec147ab7c8deec1035eec9.png)
Model:主要提供数据存取功能。
View:可能是指Activity、Fragment或者View。
viewModel:用于将 Model 和 View 进行关联,我们可以在 View 中通过 ViewModel 从 Model 中获取数据;当获取到了数据之后,会通过自动绑定,比如 DataBinding,来将结果自动刷新到界面上。
构造方式:
1:在xml页面做databinding双向绑定
![b2848d74588c0718623649c8f9733dc7.png](https://i-blog.csdnimg.cn/blog_migrate/0bc5d38a6bb777087596891b382e06cb.png)
2.建立可以观察的model
![8d05d0da6040b841c18ebdc183873546.png](https://i-blog.csdnimg.cn/blog_migrate/08978db1e96a7aa4da303820b5a5f975.png)
3.新建viewmodel绑定view和model并写入所需要的业务逻辑和事件
![e81e3111385a733e3955354c06aa5885.png](https://i-blog.csdnimg.cn/blog_migrate/d30b086138db056b97ffd9f921ed8deb.jpeg)
4.在activity获取viewmodel实例并通过viewmodel实现方法
优点:
1.低耦合:视图(View)可以独立于Model变化和修改
2.可重用性:你可以把一些视图逻辑放在一个 ViewModel 里面,让很多 view 重用这段视图逻辑。
缺点:
1.对于简单的图形界面不实用
2.如果多个页面共用一个model(个人也不建议这么干),会导致model数据变多,内存开销变大,影响性能;
3.view和model的绑定,使页面异常追踪变得不方便。