Android常用开源库所使用的设计模式有哪些?

devtools/2024/9/19 18:55:36/ 标签: android, 开源, 设计模式, 面试, 软件开发, 架构

1. OkHttp

1)构造者模式。 构建不同的Request对象。

2)工厂模式 。 通过OkHttpClient生产出产品RealCall。

3)观察者模式。OkHttp 的某些组件可能使用观察者模式来监听和响应事件,如连接状态的变化或请求的完成。

4)单例模式。连接池(ConnectionPool)或分发器(Dispatcher)设计为单例。

5)责任链模式。 将不同功能的拦截器形成一个链。

6)享元模式 。 通过线程池、连接池共享对象。

7)外观模式。 通过OkHttpClient这个外观去实现内部各种功能。

2. Retrofit

1)  动态代理。Retrofit利用Java的动态代理技术为接口创建代理实现类。这使得用户可以直接调用定义的接口方法,而Retrofit会在运行时将这些调用转换为HTTP请求。

2)  门面(外观)模式。暴露简洁的API。

3)  适配器模式。Retrofit中的CallAdapter和Converter.Factory都是适配器模式的体现。CallAdapter负责将Retrofit的Call对象适配为不同的类型,如RxJava的Observable或Java的Future。Converter.Factory则负责将HTTP响应体适配为Java对象。

4)建造者模式。用户可以链式地设置Retrofit的各种配置参数,如baseUrl、converter、callAdapter等。

5)工厂方法模式。CallAdapter.Factory和Converter.Factory都是抽象工厂,可以基于它们创建具体实现类。

3. RxJava

1)观察者模式。在RxJava中,Observable(被观察者)发出事件或数据项,而Observer(观察者)或Subscriber(订阅者)则订阅这些事件,并对它们进行响应。

2)迭代器模式。Observable发出的事件可以被连续地处理,并且可以使用操作符(如map、filter等)来转换和处理这些事件流。

3)策略模式。每个操作符都实现了某种特定的数据处理策略,如转换、过滤、合并等。

4. Glide

1)单例模式

2)工厂模式。Glide 中的 ModelLoaderFactory、DiskCache.Factory 和 TransitionFactory 等都是工厂模式的体现。

3)构建者模式。允许用户通过链式调用配置多个参数,从而创建一个完整的 Glide 请求对象。

4)原型模式

5)观察者模式

6)责任链模式

7)策略模式

8)装饰模式

9)组合模式

10)享元模式

5.Gson

1)单例模式

2)代理模式

3)工厂模式。Gson在创建特定类型的对象时,如解析器和序列化器时,使用工厂模式。

6.GreenDao

1)单例模式

2)工厂模式。GreenDao在生成数据库访问对象(DAO)时,采用工厂模式。

3)模版方式模式


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!


http://www.ppmy.cn/devtools/23569.html

相关文章

HCIP-Datacom-ARST必选题库_路由协议【道题】

单选题 442/1327. 策略路由(policy-based-route)不支持根据下列哪种策略来指定数据包转发的路径? 源地址 8 目的地址 源MAC 报文长度 单选题 10/1327、下面是关于路由选择工具的描述,其中表述错误的是 route- policy只能匹配路由和数据包,并不能用来修改路由属性或者数…

算法学习002-填数游戏 中小学算法思维学习 信奥算法解析 c++实现

目录 C填数游戏 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C填数游戏 一、题目要求 1、编程实现 在小学奥数中经常会看到一些填数字的游戏,如下图所示,其中每个…

vue3插槽的name和v-slot的研究

slot可以分为具名插槽和默认,默认插槽name是default 在父组件的template需要些v-slot/#,没写不生效,而在父组件下,而没被template包含的默认放在template且含有#default. 1)没写slot,可以不写template,也可写default的template2)写了name的slot,即使是default也必须些template…

Quarto Dashboards 教程 3:Dashboard Data Display

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度,分享官方文档的中文教程。软件可能随时更新,建议配合官方文档一起阅读。推荐先按顺序阅读往期内容: 1.quarto 教程 1:Hello, Quarto 2.qu…

力扣题目:查找共同字符

力扣题目:查找共同字符 开篇 题目链接: 1002.查找共同字符 题目描述 代码思路 使用哈希表,记录每一个字母出现的次数,每次更新最小值,寻找最小值不为0到字母,添加到list列表中 代码纯享版 class Solution {publi…

通过matlab对比遗传算法优化前后染色体的变化情况

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过matlab对比遗传算法优化前后染色体的变化情况. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ....................................…

全栈从0到1 3D旅游地图标记和轨迹生成

功能演示 演示视频 体验地址 Vercel App 开发技术栈: NextJs(前端框架)React(前端框架)TailwindCSS (CSS样式)echart echart gl (地图生成)shadui(UI组件…

教师演讲与口才培训计划(3篇)

教师演讲与口才培训计划(3篇) 教师演讲与口才培训计划(一) 一、培训目标 本培训计划旨在提升教师的演讲与口才能力,使其能够更好地与学生、家长及同行进行有效沟通,增强教学效果,展现教师风采…

CHATGPT对写作业的好处

原文:chatGPT对写作业的好处 - 夸智网 本文目录一览1、chatGPT对写作业的好处2、chatGPT批改作业3、chatGPT完成作业4、chatGPT写作业水平超过大学生5、美国大学生用chatGPT写作业大家好,今天来为您分享chatGPT对写作业的好处的一些知识,本文…

NGINX发布动态页面的方法

一、建立 [rootserver100 html]# vim index.php [rootserver100 html]# pwd /usr/share/nginx/html 二、下载PHP文件 [rootserver100 conf.d]# dnf install php.x86_64 -y 正在更新 Subscription Management 软件仓库。 无法读取客户身份 本系统尚未在权利服务器中注册。可…

学之思考试系统环境启动QA

学之思考试系统环境启动Q&A 目录 学之思考试系统环境启动Q&A后台代码启动失败:前台代码启动失败常见解决方式参考资料后台代码启动失败: 后端代码启动不成功,不能够自动导入maven,配置依赖; 使用idea打开到:\xzs-master\xzs-mysql-master\source\xzs这个路径下;…

一例MFC文件夹病毒的分析

概述 这是一个MFC写的文件夹病毒,通过感染USB设备传播,感染后,会向c2(fecure.info:443)请求指令来执行。 样本的基本信息 Verified: Unsigned Link date: 19:52 2007/7/5 MachineType: 32-bit MD5: 4B463901E5858ADA9FED28FC5…

MATLAB初学者入门(16)—— 图搜索算法

图搜索算法是解决图论中路径查找和图遍历问题的关键工具。这些算法可以找到从一个节点(起点)到另一个节点(终点)的路径,或者用于发现图中的结构特征。在MATLAB中,我们可以利用图和网络理论工具箱来实现和使…

Android 学习 鸿蒙HarmonyOS 4.0 第三章(TS的常用基本类型)

写之前先简单提一句。鸿蒙4.0之后呢,主推开发语言:ArkTs,如果你是零基础小白,不建议直接学习鸿蒙os开发,可以先从ts:TypeScript来开始学习。 编程语言介绍: ArkTs 是鸿蒙os 优选的主力应用开发…

机器学习之增强学习DQN(Deep Q Network)

增强学习(Reinforcement Learning, RL)中的Deep Q Network (DQN)是一种用于学习动作选择的深度学习模型。它是基于Q-learning算法的一种扩展,通过使用深度神经网络来估计Q值函数,从而实现对复杂环境中动作的学习和决策。 下面是一般情况下实现DQN的一些步骤: 定义状态空间和…

ChatGPT API - 笔记

1 新手如何用Python玩转ChatGPT API,详细讲解 新手如何用Python玩转ChatGPT API,详细讲解-Django社区,Django中文网,django教程,Django! import time import requestsOPENAI_API_KEY = "****" proxy = "127.0.0.1:7890" # 你需要添加你的代理,懂得都…

前端更优雅的使用 jsonp

前端更优雅的使用 jsonp 背景:最近项目中又使用到了 jsonp 这一项跨域的技术,(主要还是受同源策略影响),下面有为大家提供封装好的函数及对应使用示例,欢迎大家阅读理解 文章目录 前端更优雅的使用 jsonp同…

react useEffect中removeEventListener没生效问题解决

在useEffect中写入window.removeEventListener没有生效,代码如下 useEffect(() > {const handleResize () > {console.log(window.innerWidth, window.innerHeight);};window.addEventListener(resize, handleResize);return () > {window.removeEventLi…

HarmonyOS编程实践系列:第一节 - 创建健康App欢迎页

系列文章目录 (零)鸿蒙HarmonyOS入门:如何配置环境,输出“Hello World“ (一)鸿蒙HarmonyOS开发基础 (二)鸿蒙HarmonyOS主力开发语言ArkTS-基本语法 (三)鸿蒙…

高级数据结构与算法期中测试题

一、判断题 1、In dynamic programming algorithms, some results of subproblems have to be stored even they do not compose the optimal solution of a larger problem. T F 解析:T。在动态规划算法中,必须存储子问题的某些结果,因为他们可能需要用来…