Android:设计模式

news2024/12/24 9:08:30

文章参考来源1
文章参考来源2
文章参考来源3

MVC

Model 数据来源,管理业务数据逻辑,读取数据等

View 视图

Controller 单例模式,处理业务逻辑,负责改变Model和View

经典的MVC架构是 用户点击View,View将用户输入转发给Controller,Controller处理业务逻辑完后让Model处理对应的数据逻辑,Model更改完数据后让View来展示

而Android版本的MVC,View为xml,Activity和Fragment则是充当了Controller,对View和Controller都产生了耦合

Android 要想实现标准的MVC应该这样
定义一个数据类,作为业务数据
定义一个Activity,作为View,并监视组件,转发用户输入,适时调用Controller的方法
定义一个Controller,提供业务逻辑处理,提供一个接口给Model用于更新View
定义一个Model,处理数据逻辑,并回调接口,更新View
在这里插入图片描述
View与Controller是相互持有,因为View需要持有Controller才可以调用其方法,
而Controller必须持有View才可以改变它,Model没有持有View的必要。

优点:文件少,适合小项目
缺点:项目负责时,文件体积大、View和Controller的耦合度高

MVP

Model 数据来源

View 视图

Presenter 隔离联系人 View触发事件时调用Presenter方法,由presenter完成逻辑后改变Model和View

Android版本MVP 与MVC不同在于,MVC的Model更改完数据后,view会观察model变化而进行改变,而MVP则是Model必须通过presenter来更新View
提供两组接口A、B,
A用于更改View和监听View输入事件,Presenter接收该组接口的实例,用于回调更改View
B用于Model更新后回调Presenter的方法,间接更改View
View需要更改数据时也会调用Presenter提供的接口来调用Model
在这里插入图片描述
View和Model禁止直接通信(与MVC的区别)
Presenter通常面向界面与界面成一对一的关系,而Controller通常面向业务,服务于一个业务下的所有界面。

优点是职责清晰,接藕。
缺点是接口多,文件多,代码多。

MVVM

ViewModel:负责保存数据,处理逻辑和改动数据

View:展示数据、监听ViewModel的数据来改变自己,事件触发后直接调用ViewModel,由ViewModel处理逻辑

Model:接口返回数据的数据模型和本地存储数据模型
在这里插入图片描述
ViewModel不持有View,而Presenter持有View
MVVM为数据驱动,MVP为事件驱动

优点:逻辑清晰,代码文件少
缺点:数据绑定增加了bug,复杂页面时model会很大,长期持有影响释放内存

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

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

相关文章

springboot详细整合mybatisplus

SpringBoot详细整合mybatisPlus 文章目录 SpringBoot详细整合mybatisPlus一、引入mybatis_plus依赖二、修改mybatis_plus的yml配置三、添加mybatis_plus的其他配置以及包扫描四,修改mybatis的配置(这一步根据实际情况修改) 无奈,一…

三个关键数字变化,剖析中国智能手机市场的趋势及其影响

近期,全球行业分析机构CounterpointResearch公布了《中国智能手机高端市场白皮书》,对中国智能手机市场数据进行详细分析。该报告揭示了几个关键数据,值得深入剖析。 上面的图表展示了中国智能手机市场在2012年至2022年的11年间销量、平均价格…

UE5《Electric Dreams》项目PCG技术解析 之 PCGDemo_Ditch关卡详解

文章目录 前导文章关卡概要PCGGraphPoints From Actor Tag作为PCG的分割工具分层装饰 一些知识点和技巧使用Attribute Operation将属性暂存到临时属性中是否生成碰撞 小结 前导文章 《UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流》《UE5《Electric…

mac系统通过终端连接远程服务器

mac系统通过终端连接远程服务器 1、通过自带终端连接1.1 命令直接连接1.2 方式2——创建连接 2、通过iTerm2连接2.1 方式一:命令直接连接 3. Mac上使用scp命令 1、通过自带终端连接 1.1 命令直接连接 如下:ssh -p 22 root远程IP1.2 方式2——创建连接 …

类Twitter风格的RSS阅读器

本文完成于 2 月中旬,其中的反代还是 frp npm 方案; 什么是 RSS ? RSS 是用 PHP、Laravel、Inertia.js、Tailwind 和 Vue.js 编写的简单的类Twitter 风格的 RSS阅读器,支持 RSS和ATOM 格式。 命令行安装 在群晖上以 Docker 方式安装。 官…

形式化验证,QED: Quick Error Detection Tests for Effective Post-Silicon Validation(二)

目录 一、Article:文献出处(方便再次搜索) (1)作者 (2)文献题目 (3)文献时间 (4)引用 二、Data:文献数据(总结归纳,方便理解&am…

chatgpt赋能python:如何用Python打造一个简单的抽奖程序

如何用Python打造一个简单的抽奖程序 随着互联网的不断发展,抽奖活动已经成为了各种营销活动的必备环节,因此如何快速便捷地实现一个抽奖程序也变得尤为重要。本文将介绍如何使用Python打造一个简单的抽奖程序。 一、抽奖程序的工作原理 抽奖程序的核…

Vue使用vue-3d-model组件预览3D三维文件、立体文件,支持旋转、自动播放

实现效果 Tips:先泼个冷水,这个预览3D组件有个致命的缺陷——不能设置材质、皮肤文件的目录路径,必须要和3d文件放在同一个目录,如果项目是用hash模式(url后面会有/#/这种井号),就会导致无法读取根目录的材质文件。所以推荐了解下…

LabVIEW利用相机开发零件处理和检查系统

LabVIEW利用相机开发零件处理和检查系统 为了将自动化运用于飞机发动机轮机机翼的去毛刺和检查流程,设计了一个系统,该系统使用六轴机器人操作抖动,并结合两个关键操作。首先,使用专门选定的工具对机翼进行去毛刺,以去…

ssh 端口转发

本地转发 ssh -L -CTfN 9527:remote_server_ip:23 ssh_server_ipL 本地转发模式C 压缩数据T 禁用模拟终端f 后台运行N 不执行远程指令, 常用于仅做端口转发 在local_server上开启本地转发模式之后 。ssh_server就会出现2端的TCP链接。然后所有发向9527端口TCP数据…

ASCII、Unicode、UTF-8、GBK、全角/半角

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、定义 1、ASCII 2、Unicode 3、UTF-8 4、GB2312 5、GBK 6、\u和\x 7、全角和半角 二、相互转化 1、str 与 ASCI…

[acwing周赛复盘] 第 110 场周赛20230701

[acwing周赛复盘] 第 110 场周赛20230701 总结5044. 求和1. 题目描述2. 思路分析3. 代码实现 5045. 三角形数1. 题目描述2. 思路分析3. 代码实现 5046. 智商药1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 状态不对,把自己写懵了。T1 模拟币T2 对向双指针…

关于Linux同步机制知识点整理

在Linux系统中,同步机制是操作系统中非常重要的一部分,以下是一些基本要点: 互斥锁 互斥锁是一种「独占锁」,比如当线程 A 加锁成功后,此时互斥锁已经被线程 A 独占了,只要线程 A 没有释放手中的锁&#…

梁宁:VisionPro、GPT、Web3三件套齐备,元宇宙开启

本文内容整理自图灵社区对谈栏目直播,主题为 ChatGPT 真需求,从产品的第一性原理解析。 上篇内容回顾:梁宁:为什么中国没有像 ChatGPT 和 Vision Pro 这样的创新产品? 梁宁,产品战略专家,曾任湖…

chatgpt赋能python:如何在Python中安装PIL

如何在Python中安装PIL Python Imaging Library(PIL)是一款用于处理图像的Python库,它提供了各种图像处理功能,包括大小调整、旋转、裁剪等等。如果你需要在你的Python项目中处理图像,那么PIL是一个不错的选择。 步骤…

DBeaver连接GaussDB

DBeaver 官网:https://dbeaver.io/打开DBeaver,点击菜单栏 “数据库”>“驱动管理” 点击“新建” 填入下面内容: 驱动名称:GS 驱动类型:Generic 类名:org.postgresql.Driver URL模板:jdbc…

Linux:LNMP上搭建discuz论坛(源码安装)

LNMP环境 Linux :LNMP(源码包安装)_鲍海超-GNUBHCkalitarro的博客-CSDN博客 discuz论坛 准备好源码包 LNMP环境正常 yum -y install unzip unzip Discuz_X3.3_SC_UTF8.zip # unzip 源码包名称 mv upload/ /usr/local/nginx/html/tarro…

信号链噪声分析13

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 接 触 ADC 或 DAC 时您一定会碰到这个经常被引用的公式,用于计算转换器理论信噪 比(SNR)。与其盲目地相信表象,不如从根本上了解其来源,因为…

Shell中的流程控制(if/case/for/while)

文章目录 Shell中的流程控制(if/case/for/while)1 if判断1.1 单分支1.2 多分支 2. case语句3 for循环3.1 第一种写法 (())3.2 第二种写法 in 4 while循环4.1 demo14.2. demo2测试let Shell中的流程控制(if/case/for/while) 1 if判…

【C】操作符详解

操作符 算术操作符移位操作符位操作符赋值操作符()复合赋值操作符 单目操作符关系操作符逻辑操作符逗号表达式条件操作符下标引用,函数调用和结构成员 今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种…