Android 架构MVC MVP MVVM+实例,高级安卓面试题及答案

本文详细介绍了Android中的MVC、MVP和MVVM三种设计模式的工作原理、优缺点,强调了它们在处理界面逻辑和复杂度方面的差异,以及如何选择合适的架构。
摘要由CSDN通过智能技术生成
  • Model:实体类(数据的获取、存储、数据状态变化)。

  • View:布局文件

  • Controller:Activity(处理数据、业务和UI)。

工作原理


  • 1.View接受用户的交互请求。

  • 2.View将请求转交给Controller。

  • 3.Controller操作Model进行数据更新。

  • 4.数据更新之后,Model通知View数据变化。

  • 5.View显示更新之后的数据。

MVC的缺点


随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

为了解决MVC的缺点,MVP 框架被提出来。

MVP是什么

======

MVP是MVC架构的一个演化版,全称是Model-View-Presenter。将MVC中的V和C结合生成MVP中的V,引入新的伙伴Presenter。

Android中的MVP含义


  • Model:实体类(数据的获取、存储、数据状态变化)。

  • View:布局文件+Activity。

  • Presenter:中介,负责完成View与Model间的交互和业务逻辑。

工作原理


  • 1.View 接收用户交互请求

  • 2.View 将请求转交给 Presenter(V调用P接口)

  • 3.Presenter 操作Model进行数据更新(P调用M接口)

  • 4.Model 通知Presenter数据发生变化(M调用P接口)

  • 5.Presenter 更新View数据(P执行接口,V相应回调)

MVP的优点


  • 1.复杂的逻辑处理放在Presenter进行处理,减少了Activity的臃肿。

  • 2.解耦。Model层与View层完全分离,修改V层不会影响M层,降低了耦合性。

  • 3.可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。

  • 4.Presenter层与View层的交互是通过接口来进行的,便于单元测试。

MVP的缺点


维护困难。Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。

MVVM是什么

=======

是 Model-View-ViewModel 的简写。MVVM与MVP的结构还是很相似的,就是将Presenter升级为ViewModel。在MVVM中,View层和Model层进行了双向绑定(即Data Binding),所以Model数据的更改会表现在View上,反之亦然。ViewModel就是用来根据具体情况处理View或Model的变化。

Android中的MVVM含义


  • Model:实体类(数据的获取、存储、数据状态变化)。

  • View:布局文件+Activity。

  • ViewModel: 关联层,将Model和View进行绑定,Model或View更改时,实时刷新对方。

工作原理


  • 1.View 接收用户交互请求

  • 2.View 将请求转交给ViewModel

  • 3.ViewModel 操作Model数据更新

  • 4.Model 更新完数据,通知ViewModel数据发生变化

  • 5.ViewModel 更新View数据

View/Model的变动,只要改其中一方,另一方都能够及时更新到

MVVM的优点


  • 1.提高可维护性。Data Binding可以实现双向的交互,使得视图和控制层之间的耦合程度进一步降低,分离更为彻底,同时减轻了Activity的压力。

  • 2.简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试。

  • 3.ViewModle易于单元测试。

MVVM的缺点


  • 1.对于简单的项目,使用MVVM有点大材小用。

  • 2.对于过大的项目,数据绑定会导致内存开销大,影响性能。

  • 3.ViewModel和View的绑定,使页面异常追踪变得不方便。有可能是View出错,也有可能是ViewModel的业务逻辑有问题,也有可能是Model的数据出错。

MVP和MVC的最大区别

============

在MVP中View并不直接使用Model,它们之间的通信是通过Presenter 来进行的,所有的交互都发生在Presenter内部,而在MVC中View直接从Model中读取数据而不是通过 Controller。

如何选取框架

======

本来是要每个模式写一个适用场景,最后想想每个人都有自己的理解,别被他人束缚了。

一句话:适合自己的才是最好的!

实例

==

就这么一个界面咱通过MVC、MVP、MVVM分别搭建一下。

MVC实例


代码结构

1.在layout创建一个布局文件

<LinearLayout

…>

<EditText

android:id=“@+id/et_account”

…/>

<LinearLayout

…>

<EditText

android:id=“@+id/et_password”

…/>

<Button

android:id=“@+id/btn_login”

…/>

<Button

android:id=“@+id/btn_back”

…/>

2.实体类(User)

public class User {

private String name;

private String password;

public User() {}

//set or get …

public User(String name, String password) {

this.name = name;

this.password = password;

}

}

3.MVCLoginActivity

//用户点击事件

mvcBinding.mcvLogin.btnLogin.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

user.setName(mvcBinding.mcvLogin.etAccount.getText().toString());

user.setPassword(mvcBinding.mcvLogin.etPassword.getText().toString());

login(user);

}

});

//逻辑处理

private void login(User user){

if(!user.getName().isEmpty()&&!user.getPassword().isEmpty()){

if(user.getName().equals(“scc001”)&&user.getPassword().equals(“111111”))

{

Toast.makeText(this,“登录成功”,Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this,“登录失败”,Toast.LENGTH_SHORT).show();

}

}else {

Toast.makeText(this,“登录失败”,Toast.LENGTH_SHORT).show();

}

}

MVP实例


代码结构

1.Model层

实体类bean,同MVC中的User类,就不贴代码浪费大家时间了。

Model层所要执行的业务逻辑

/**

* 功能:接口,表示Model层所要执行的业务逻辑

*/

public interface LoginModel {

//User实体类;OnLoginFinishedListener presenter业务逻辑的返回结果

void login(User user, OnLoginFinishedListener listener);

}

实现类(实现LoginModel接口)

/**

* 功能:实现Model层逻辑

*/

public class LoginModelImpl implements LoginModel {

//第4步:验证帐号密码

@Override

public void login(User user, OnLoginFinishedListener listener) {

if(user.getName().isEmpty()||!user.getName().equals(“scc001”)){

//第5步:Model层里面回调Presenter层listener

listener.onUserNameError();

}else if(user.getPassword().isEmpty()||!user.getPassword().equals(“111111”)){

//第5步:Model层里面回调Presenter层listener

listener.onPasswordError();

}else {

//第5步:Model层里面回调Presenter层listener

listener.onSuccess();

}

}

}

2.Presenter层

当Model层得到请求的结果,回调Presenter层,让Presenter层调用View层的接口方法。

/**

* 功能:当Model层得到请求的结果,回调Presenter层,让Presenter层调用View层的接口方法。

*/

public interface OnLoginFinishedListener {

void onUserNameError();

void onPasswordError();

void onSuccess();

}

完成登录的验证,以及销毁当前View。

/**

* 功能:登录的Presenter的接口,实现类为LoginPresenterImpl,

* 完成登录的验证,以及销毁当前View。

*/

public interface LoginPresenter {

//完成登录的验证

void verifyData(User user);

//销毁当前View

void onDestroy();

}

Presenter实现类,引入 LoginModel(model)和LoginView(view)的引用

/**

* 功能:实现类,引入 LoginModel(model)和LoginView(view)的引用

*/

public class LoginPresenterImpl implements OnLoginFinishedListener, LoginPresenter {

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案


领取方法:

所有资料获取方式:评论666+点赞即可咨询资料免费领取方式!

直达领取链接:【Android高级架构师】文件夹下载!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

法:

所有资料获取方式:评论666+点赞即可咨询资料免费领取方式!

直达领取链接:【Android高级架构师】文件夹下载!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-PHMx4MLS-1710958465777)]
[外链图片转存中…(img-LRRxeush-1710958465778)]
[外链图片转存中…(img-JspvJe1y-1710958465778)]
[外链图片转存中…(img-uOBtgvvj-1710958465779)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-ft9SFBTN-1710958465779)]

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MVCMVPMVVM 是三种设计模式,用于在 Android 应用程序中组织代码。 MVC(模型-视图-控制器):模型存储应用程序数据,视图显示数据,控制器处理用户交互。 MVP(模型-视图-presenter):与 MVC 类似,但 presenter 更加紧密地与视图绑定,负责更新视图。 MVVM(模型-视图-视图模型):与 MVP 类似,但视图模型与视图绑定,负责将数据转换为视图可用的形式。 三者的差异在于MVC会产生视图和模型之间的耦合,MVPMVVM是将视图和模型之间的耦合分离,更加灵活。 ### 回答2: Android开发中,MVCMVPMVVM都是常见的架构模式,用来组织Android应用的代码结构,让代码更加规范、易于维护。 MVC(Model-View-Controller)是最早的一种架构模式,它将应用分为三个模块:模型(Model)、视图(View)和控制器(Controller)。其中模型负责数据的存储和操作,视图负责显示界面,控制器则负责对用户输入进行响应,协调模型和视图之间的关系。MVC模式的优点是结构清晰,各个模块职责分明,易于实现代码复用,因此广泛应用。但是MVC模式也有一些缺点,比如控制器中很难进行单元测试,代码复杂度较高,难以维护大型项目等问题。 MVP(Model-View-Presenter)是一种基于MVC模式的改进,它将模型和视图分离,通过在中间加上Presenter来连接两者。Presenter接受用户的输入,并根据视图的状态更新数据模型,然后更新视图显示。MVP模式的优点是易于单元测试,将业务逻辑和界面分离,代码复杂度较低,易于维护。但是对于大型项目,Presenter层也会变得庞大且复杂。 MVVM(Model-View-ViewModel)是一种结合数据绑定和命令模式的前端设计模式,它将模型、视图和ViewModel分开,通过数据绑定将视图和ViewModel联系起来。ViewModel封装了视图的状态和行为,当ViewModel被修改时,视图会自动更新。MVVM模式的优点是将视图和ViewModel解耦,通过数据绑定自动更新视图,提高了代码的可重用性。但MVVM模式需要使用大量的数据绑定,可能导致系统卡顿,同时实现较为复杂。 总的来说,MVCMVPMVVM这三种模式都有各自的适用场景。在小型项目中,可以使用MVC模式;在中型项目中,可以使用MVP模式;在大型项目中,可以使用MVVM模式。选择合适的架构模式能够让代码更易于维护,提高开发效率。 ### 回答3: Android是一种以Java为基础的开源操作系统,广泛应用于移动设备中。在开发Android应用程序时,常用的三种架构模式是MVCMVPMVVMMVC是一种典型的应用程序架构模式,其中M代表模型,V代表视图,C代表控制器。在Android中,MVC通常用规定ViewController或Activity来实现。 MVP是Model-View-Presenter的缩写,其中M代表模型,V代表视图,P代表演示者。MVP将视图项分离,并引入中间者Presenter,以实现界面和业务逻辑分离的目的。在Android中,MVP通常实现在Activity或Fragment上。 MVVM是Model-View-ViewModel的缩写,其中M代表模型,V代表视图,VM代表视图模型。ViewModel担任中间件角色,处理视图中的数据,并使控制逻辑与视图分离开。在Android中,MVVM通常实现了Data Binding。 总的来说,三种架构模式都旨在将应用程序分离成各个组成部分,每个部分具有各自分离的职责,在开发Android应用程序时选择合适的架构模式,能够提高开发效率、提高代码质量、降低维护成本、提高整个应用程序的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值