Android:设计模式

文章参考来源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.hqwc.cn/news/3226.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建自己的 new bing网站----nginx反代(群晖,全docker版)

文章目录 1.前言:2. 部署过程:2.1.部署go-proxy-bing 项目:2.1.部署nginx反代:这两步完成实际上就可以访问了, 3.部署聊天服务器:代表链接成功! 1.前言: 本篇教程全萌新向&#xff…

12-代码实战——服务器版表白墙

目录 1.版本一:将数据存到内存中 ①约定前后端交互接口 a.添加表白信息: b.查询表白列表: ②在webapp包下创建message-wall.html前端文件 ③在java包下创建AddMessageServlet后端类 ④在java包下创建MessageListServlet后端类 2.版本…

Python案例——采集专栏文章保存成pdf

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境使用: python 3.8 >>>>>> 运行代码 pycharm 2022.3 >>>>>> 辅助敲代码 wkhtmltopdf 软件 找助理邀课老师获取 模块使用: 内置模块 re >>>正则表达式 第三方模…

二重积分的解题技巧

计算方法 本节内容一般都应该先画图再思考后续内容较为直观 基本口诀是:后积先定限,限内画条线,先交写下限,后交写上限(且下限必须小于上限) 结合下图进行解释,后积先定限,对于X-型来…

VMIC-pci-5565反射内存的优势

优势: (1)实现远程互连的能力 随着仿真实验复杂度的提高,需要多楼宇多试验室间设备的远程互连,通过单模光纤及光纤HUB将远距离的试验室设备进行连接,单模光纤支持的传输距离可达20km。对于距离300m以内的试…

循坏队列CircularQueue

前言 一、CircularQueue 二、特点 三、设计思路 1)判空与判满 2)链表还是数组实现? 四、实现 1).IsEmpty() 2).IsFull() 3)CircularQueueCreate创建 4)CircularQueueEnQueue插入 5)CircularQueueDeQueue删除 6&#xf…

C++——string容器常用操作汇总

纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.string容器基本概念二.string容器常用操作✅前言及函数参数的说明一.构造和析构二.string特性操作三.字符操作四.赋值操作五.拼接操作六.交换…

亚马逊云科技积极探索多样化生态合作模式,助力实现可持续发展愿景

2023年6月26日,亚马逊云科技中国峰会在上海世博中心盛大开幕!以主题“因构建 而可见”为大家拉开帷幕。当前,越来越多的企业客户,以及当地政府监管机构对企业的要求,都需要企业告知碳足迹,亚马逊云科技提供…

华为OD机试真题 JavaScript 实现【寻找峰值】【牛客练习题】

一、题目描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于; 2.假设 nums[-1] n…

C语言:数据的存储

往期文章 C语言:初识C语言C语言:分支语句和循环语句C语言:函数C语言:数组C语言:操作符详解C语言:指针详解C语言:结构体 目录 往期文章前言1. 数据的类型2. 整型在内存中的存储2.1 原码、反码、…

不知道识别表格的方式有哪些?分享识别表格怎么弄

小明:嘿,小红!你知道吗?最近我在整理一堆纸质表格,但是手动输入数据实在太耗时间了,我在想有没有什么方法可以快速识别表格的内容呢? 小红:哦,我听说过有一些方式可以自…

认识固态继电器及其工作原理

什么是固态继电器,有什么优缺点? 固态继电器 简称SSR,又被称之为“无触点开关”它利用电子元件(如双向可控硅等半导体器件)的开关特性,可到达无触点无火花地接通和断开电路。 固态继电器工作可靠&#…