安卓基础巩固(四):设计原则、安卓主流技术框架MVC/MVP/MVVM、设计模式

news2024/12/26 23:35:38

文章目录

  • 架构设计
    • 为什么要进行技术框架的设计
  • 六大设计原则
    • 一、单一职责原则
    • 二、开闭原则
    • 三、依赖倒置原则
    • 四、接口分离原则
    • 五、迪米特法则(又称最小知道原则)
    • 六、里氏替换原则
    • 案例诠释
  • 安卓主流开发技术框架
    • MVC模式
    • MVP模式
    • MVVM
    • MVP模式详解

架构设计

为什么要进行技术框架的设计

  • 模块化功能:使得程序模块化,即内部高聚合,模块之间低耦合
  • 提高开发效率:开发人员只需要专注于一点(视图显示、业务逻辑、数据处理)
  • 提高测试效率:后期测试时可以迅速根据报错反馈,定位到问题出现的位置。

六大设计原则

六大设计原则是设计模式的理论,设计模式是设计原则的实践。

一、单一职责原则

一个类只负责一个职责,术语叫仅有一个引起变化的原因。一个类应该是一组相关性很高的函数及数据的封装。

二、开闭原则

一个软件实体应该对扩展开放,对修改关闭。
提倡一个类一旦开发完成,后序增加新的功能,不应该通过修改这个类实现,而是通过继承或者接口实现增加新的类。

三、依赖倒置原则

抽象不应该依赖于细节,细节应该依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

也就是说两个模块之间的通信应该通过接口来实现。

在这里插入图片描述

四、接口分离原则

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。即让调用者依赖的接口尽可能小,接口分离类似于单一职责原则。

五、迪米特法则(又称最小知道原则)

一个软件实体应该尽可能地减少与其他实体发生相互作用。或者说一个类,对自己需要调用的类知道得最少,类的内部应该与被调用者无关,也称迪米特隔离

例如使用一个Thread类下边的run方法,按照迪米特原则,可以把run单独抽离出来,构建一个Runnable接口供userClass使用,这样调用者userClass与Thread之间的交互是最少的。
在这里插入图片描述

六、里氏替换原则

所有引用基类(父类)的地方,必须能够透明的使用其子类的对象。即一个软件系统中,把所有用到某个类的地方都替换为其子类,系统应该仍然可以正常工作。这个原则依赖面向对象的继承特性和多态特性。

案例诠释

  1. 按照单一职责原则构建一个类或者接口
  2. 基于开闭原则继承类或者实现接口,来构建新类。
  3. 基于里式替换原则,所有使用父类的地方可以使用子类来替换。
  4. 与其他类之间交互时,基于依赖倒置原则,使用接口通信。
  5. 接口设计时,基于接口隔离原则,应该设计多个专门实现某种功能的接口
  6. 基于迪米特原则,老师类要实现对同学的点名,应该通过一个用来跟同学交互的班长,分层次实现。

在这里插入图片描述

安卓主流开发技术框架

MVC模式

角色说明:

  • Model:模型层,数据模型及其业务逻辑,是针对业务模型建立的数据结构,Model与View无关,而与业务有关。数据的获取以及对数据进行的不依赖视图的操作
  • View:视图层,用于与用户实现交互的页面,通常实现数据的输入和输出功能。
  • Controller:控制层,用于连接Model层和View层,完成Model层和View层的交互。还可以处理页面业务逻辑,它接收并处理来自用户的请求,并将Model返回给用户。
    在这里插入图片描述
    模式说明:
    在这里插入图片描述
    存在的问题:
    Activity责任不明,十分臃肿,Activity除了承担View层的部分职责(加载应用布局,监听并反馈用户操作),还要承担Controller层的功能(业务逻辑处理)。
    随着界面的增多与逻辑复杂度的提高,Activity类的代码量不断增加,越加臃肿,使得项目调试和管理困难

MVP模式

为了解决MVC模式存在的问题,分离Activity中的View层和Controller层的职责,从而对Activity代码量进行优化和瘦身。

角色说明:

  • Model 模型层:只负责存储数据,与View呈现无关,也与UI处理逻辑无关,发生更新也不用主动通知View
  • View 视图层:人机交互接口,一般为展示给用户的界面,通过Activity实现。
  • Presenter 表示层:负责连接V层和M层,完成交互,负责业务逻辑处理。
    在这里插入图片描述
    模式说明:View层接收用户的输入,View层与Model层交互必须经过Presenter层。
    相对于MVC,MVP模式把原来的UI逻辑抽象为View接口,把原来的业务逻辑抽象为Presenter接口,Model还是原来的Model
    在这里插入图片描述
    在MVP模式中上下层之间的交互是双向的,View层和Model层之间被Presenter层完全隔绝。

对比MVC模式,它的优点在于:

  • 耦合度更低,通过Presenter实现数据和视图之间的交互,完全隔离了View层与Mode层,二者互不干涉。
  • Activity代码变得更加简洁:简化了Activity的职责,仅负责UI相关操作,其余复杂的逻辑代码提取到了Presenter层中进行处理。

MVVM

为了更加分离M、V层,更加释放Activity的压力,于是出现了MVVM(其中最后的VM表示viewmodel)
● M(Model,模型层 )
● V(View,视图层)
● VM(ViewModel,V与M连接的桥梁,也可以看作为控制器)

MVVM基本与MVP模式完全一致,只是将表示层Presenter改名为ViewModel。

模式说明:
MVVM比较特别的地方在于采用了双向绑定(data binding):view的变动,自动反映在ViewModel,反之亦然。

  • ViewModel,View之间的交互通过Data Binding完成
  • Data Binding可实现双向交互。
    在这里插入图片描述

MVP模式详解

核心思想是原来UI逻辑抽象为View接口,把原来的业务逻辑抽离为Presenter接口,并且由具体的实现类来完成。具体实现思路如下:

  • 把Activity中的UI逻辑抽象为View即可,由具体的类完成
  • 把Activity中的业务逻辑抽象为Presenter接口,由具体的实现类来完成。
  • Model类还是原来MVC模式中的Model层。

MVP模式的UML图如下:
在这里插入图片描述
通过UML图可以看出使用MVP模式的步骤如下:

  1. 设置view层:创建IView接口,放置所有视图逻辑的接口。其实现类是当前的Activity或者Fragment。
  2. 设置presenter层:创建IPresenter接口,放置所有业务逻辑的接口,创建它的实现类PresenterComl。
  3. 设置model层:放置业务逻辑,数据存储。model并不是必须有,但必须有presenter和view。
  4. 在activity里包含了一个IPreseter接口,而PresenterComl实现类包含一个ivew并依赖model层,activity里只保留对Ipresenter接口的调用,其他工作全部留到PresenterCompl实现类中实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Springboot下redis用pipelining管道模式写入性能调优实例讲解

Springboot下redis写入pipelining管道模式性能调优实例 一、真实场景 生产真实项目过程中,需要将数据库的数据同步写入redis,此过程中遇到写入redis的瓶颈。每次启动项目都要将数据库数据重载到redis,这个过程耗费了大量的时间。 二、解决…

图片转字符图片工具类

├── cn.xsshome.imagetool //包名├── convert │ └── ImageToChar //图片转字符图片、文本方法 ├── slideverifycode │ └── SlideVerifyCodeGenerateUtil //滑块验证码工具类代…

多项式回归预测

目录 1、多项式回归 2、R-Squared 1、多项式回归 如果在实际中数据点显然不适合线性回归(穿过数据点之间的直线),那么多项式回归可能是理想的选择 像线性回归一样,多项式回归使用变量 x 和 y 之间的关系来找到绘制数据点线的最佳…

空气中的声压级、声功率级、声强级的区别

空气中的声压级、声功率级、的区别 在学习声学理论时,经常听到,声压级、声强级、声功率级的名称,经常也听到它们的单位为dB.但是它们是怎样的区别呢?下面介绍这几个名词 一、定义和计算 1.声压级 声压级以 L p {L_p} Lp​表示&am…

《Netty》从零开始学netty源码(六十一)之解码器

目录 解码器LineBasedFrameDecoderDelimiterBasedFrameDecoderFixedLengthFrameDecoderLengthFieldBasedFrameDecoder 解码器 在上一篇中介绍了Netty的解码器抽象类ByteToMessageDecoder,Netty也定义了一些常用的解码器,这些解码器都实现了ByteToMessag…

第一波IT去美国化的公司不是华为

第一波去美国化的不是华为,是BAT京东等 互联网类公司发起的工程叫:去IOE IBM小型机,ORACLE数据库,EMC存储 几年前已经完成了技术去美化 趣讲大白话:安全是底线 【趣讲信息科技174期】 **************************** 第…

hash在后端的应用

目录 散列表hash 函数种类: 布隆过滤器场景:构成原理应用分析选择 hash 函数问题:只用2GB内存在20亿个整数中找到出现次数最多的数完整代码: 分布式一致性 hashhash迁移hash 偏移虚拟节点 散列表 hash 函数 计算速度快 强随机分布…

Windows下搭建Tomcat HTTP服务,发布外网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 转载自cpolar内网穿透的文章:外网访问本地Tomcat服务器【cpolar…

常见卫星图源下载教程

文章目录 一、引言二、在线地图源是简介三、常见地信软件如何浏览与下载图源?(1)QGIS(2)arcgis pro(3)arcgis 四、各个图源的具体下载方法(1)Google Earth1)qgis下载Google Earth2&a…

面对史上最难求职季,哪些测试技能更容易拿到offer?

在一线大厂,没有测试这个岗位,只有测开这个岗位。这几年,各互联网大厂技术高速更新迭代,软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰,各种新的测试技术层出不穷,测试人员的薪资也水涨船高。与…

Java【问题 05】yml配置文件boolean一直为false问题分析解决

yml配置文件boolean一直为false 1.问题说明2.bug复现2.1 yml配置2.2 配置类2.3 测试类2.4 结果输出 3.源码分析3.1 Data3.2 Generate Getters and Setters 4.问题解决4.1 修改参数名称4.2 添加Getter和Setter方法 1.问题说明 application.yml配置文件里的布尔值获取后一直为fa…

MapReduce【自定义OutputFormat】

MapReduce默认的输出格式为TextOutputFormat,它的父类是FileOutputFormat,即按行来写,且内容写到一个文本文件中去,但是并不能满足我们实际开发中的所有需求,所以就需要我们自定义OutPutFormat。 自定义OutPutFormat 输出数据到…

Java 与排序算法(4):希尔排序

一、希尔排序 希尔排序(Shell Sort)是插入排序的改进版,由 Donald Shell 在 1959 年提出。希尔排序通过将待排序序列分成多个子序列,分别进行插入排序,最后再进行一次整体的插入排序,从而提高了排序效率。…

对于 CRC 校验的 学习笔记

参考资料 CRC校验原理及实现 - 知乎 (zhihu.com) <-- 这个讲的特别好&#xff0c;我的博客主要是抄他的&#xff0c;最后加了一点代码库的分析。 [CRC校验]手算与直观演示_哔哩哔哩_bilibili <-- 这个视频非常直观 【FPGA】CRC校验算法从数学原理到代码实现 CRC 参数…

一体集成的 API 调试工具,居然才听说?

在 Eolink ApiKit之前&#xff0c;定义 API 用 Swagger&#xff0c;生成文档用 YAPI&#xff0c;前端自测用 Mock&#xff0c;接口测试用 Postman&#xff0c;性能测试用 JMeter。 有了 Eolink ApiKit之 之后&#xff0c;Apikit Postman Swagger Mock JMeter&#xff0c;团…

办公室想装修?玻璃隔断让你的办公区域成为艺术品!

玻璃隔断是现代办公室装修中非常受欢迎的设计元素。它们不仅可以实现空间区分&#xff0c;还能为办公区带来现代感和艺术气息。 玻璃隔断的优点 1. 明亮&#xff1a;玻璃隔断可以让自然光线进入整个房间&#xff0c;使空间变得更加明亮&#xff0c;有益于工作效率和员工的情绪健…

Apikit 超强的接口管理神器

接口管理现状 一、常用解决方案 使用 Swagger 作为接口文档工具 使用 Postman 调试接口 使用 RAP Mock 数据 使用 JMeter 做接口自动化测试 二、存在的问题 维护不同工具之间数据一致性非常困难、非常低效。并且这里不仅仅是工作量的问题&#xff0c;更大的问题是多个系…

理解和使用pom.xml 及在idea中具体如何查看依赖冲突情况

pom基本配置说明&#xff0c;直接在下面菜鸟教程中就可以看到 Maven POM | 菜鸟教程 一、关闭父依赖约束 去掉这个模块&#xff0c;依赖约束就会失效&#xff0c;这样每个包之间的依赖冲突的可能性非常大。 <parent><groupId>org.springframework.boot</gr…

期末复习总结!!【MySQL】库和表的基本操作 + 增删改查CURD

文章目录 前言一、数据库的基本操作1, 查看库2, 创建库3, 使用库4, 删除库 二、表的基本操作1, 创建表2, 查看表3, 查看表结构4, 删除表 三、增加(Create)四、查询(Retrieve) (重点)1, 全列查询2, 指定列查询3, 查询字段为表达式4, 指定别名5, 去重6, 排序7, 条件查询7.1, 基本…

【考前熟悉】系统集成项目管理师-相关计算公式

前言 计算公式汇总&#xff1a;三点估算PERT、标准差、工作概率、预期收益EMV、加权算法、沟通渠道 净现值、进度网络、挣值分析、预测技术 文章目录 前言计算公式汇总1. 期望工期&#xff08;活动持续时间&#xff09;/三点估算PERT&#xff1a;&#xff08;最悲观日期 最乐观…