面试:常用的设计模式总结

news2025/3/1 14:13:09

一、Retrofit中的设计模式

二、OKHTTP中的设计模式

1、责任链模式interceptor拦截器:最主要的是5个拦截器

2、建造者:okhttp的client创建用了

3、观察者:返回结果抽离应该算是

4、工厂模式:Call 的创建用了工厂,CacheStrategy.Factory,这是一个简单工厂模式,主要也是用于生成一个CacheStrategy对象。

5、门面模式:这个模式可能太常见了,确实式一个很容易让人忽略的地方,因为几乎所有框架或者开源库基本上都或多或少的使用到了门面模式。

门面模式的定义:提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。也称外观模式。
简单说就是提供一个类提供一些接口供客户端使用,隐藏内部调用的复杂性。OkHttp中提供了一个类OkHttpClient来供用户使用,其内部关联了大量的对象,以及处理细节,但是用户只需要根据OkHttpClient提供的接口使用即可。从这方面看确实大部分的开源框架都在使用门面模式。

三、RxJava中的设计模式

Rxjava中的设计模式 - 简书

1、观察者模式:Observable 就是一个被观察者,而 Observer 为观察者,当 Observer 订阅 Observable 时,Observer 就可以收到 Observable 的事件通知。

2、装饰者模式:在不改变原类文件(Observer)以及不使用继承的情况下,动态地将责任附加到对象上(mapper.apply(t)),从而实现动态拓展一个对象的功能。它是通过创建一个包装对象(MapObserver),也就是装饰来包裹真实的对象(Observer)

四、列举一些Android源码中设计模式

Builder模式:比如AlertDialog.Builder;

适配器模式:比如GridView、ListView与Adapter;

观察者模式:比如ContentObserver;Android LiveData就是通过观察者模式提供的

抽象工厂模式:比如BaseActivity;

单例模式:ActivityManagerSingleton

模版方法:Android中view的绘制流程就使用了设计模式。在父类中定义好具体要执行的类的方法。然后子类根据具体的需要去选择具体的实现

装饰者模式:context类图如下:

Context(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。

ContextImpl(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法)。

ContextWrapper(抽象装饰类):它也是抽象构件类的子类,抽象装饰类不一定是抽象方法。用于给具体构件增加职责,但是具体职责在其子类中实现。它维护一个指向抽象构件对象的引用,通过该引用可以调用装饰之前构件对象的方法,并通过其子类扩展该方法,以达到装饰的目的。

Service,Application(具体装饰类):它是抽象装饰类的子类,负责向构件添加新的职责。每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法用以扩充对象的行为。

在startActivity时候,会调用系统的handleLaunchActivity方法,接着调用performLaunchActivity方法。其中会创建一个ContextImpl. 然后activity.attach(ContextImpl)将ContextImpl赋予ContextWrapper的mBase。ContextWrapper中的所有行为全都通过mBase去实现。同时ContextWrapper通过具体的子类扩展方法不同的行为,实现对context的装饰和功能扩展。

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

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

相关文章

几何算法——10.欧拉操作

几何算法——10.欧拉操作1 欧拉操作1.1 欧拉操作的设计思想1.2 欧拉操作的选取1.3 几个典型的欧拉操作1.3.1 mvfs1.3.2 mev1.3.3 mef1.3.4 kemr1.3.5 kfmrh1.4 一个欧拉操作的实例1.5 欧拉操作的三点结论2. 非流形体2.1 非流形模型(non-manifold model)2…

动力节点索引优化解决方案学习笔记——性能分析

2. 性能分析 2.1 MySQL常见瓶颈 SQL中对大量数据进行比较、关联、排序、分组时CPU的瓶颈。 实例内存满足不了缓存数据或排序等需要,导致产生大量的物理IO。查询数据时扫描过多数据行,导致查询效率低。 2.2 Explain 使用EXPLAIN关键字可以模拟优化器执…

Super Vlan理论讲解

目录 Super Vlan作用 Super Vlan类型 Super Vlan通信规则 华为Super Vlan配置 传统Vlan部署中,一个Vlan对应一个网段和一个Vlanif接口来实现Vlan间的通信 造成了IP地址的浪费,因此提出了Super Vlan技术 Super Vlan作用 Super Vlan又称为聚合&#x…

java计算机毕业设计ssm金华学校社团管理系统

项目介绍 随着计算机信息技术的迅猛发展,互联网技术大规模应用到各行各业,传统的管理系统也逐渐精细化。高校作为教书育人的场所,各种管理也更应该智能化,特别是计算机信息专业更是最早接触信息技术,为高校各部门开发必要的系统是很有意义的事情。本金华学校社团管理系统对社团…

蓝桥杯刷题(二)

蓝桥杯刷题一.空间二.排序三.成绩分析四.蛇形填数五.跑步锻炼&#xff08;较难&#xff09;一.空间 这道题很简单&#xff0c;要弄清单位间的转换和如何输出就可以啦 #include <stdio.h>int main() {printf("%.0f",256/(32/4/2/1024.0000/1024));return 0; }记…

面试必学:输入 URL到页面的全过程-----五步完成、简单明了

目录 一、应用层解析 二、传输层连接 三、服务区处理 四、浏览器处理 五、断开 一、应用层解析 进行DNS解析&#xff1a;即将域名地址解析成 IP 地址 网络设备是通过 IP地址&#xff0c;作为身份标识 但是 IP地址不好记&#xff0c;所以很多时候就用一串单词 来进行表示。…

ipv6地址概述——深入讲解ipv6地址

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.ipv6地址深入了解 1.ipv6地址表示 ①冒号十六进制表示法&am…

计算机组成原理-中央处理器详细讲解(持续更新中)

CPU的功能和基本结构 CPU由运算器和控制器两大部分组成 CPU的功能 指令控制。完成取指令、分析指令和执行指令的操作&#xff0c;即程序的顺序控制。操作控制。一条指令的功能往往是由若干操作信号的组成来实现的。CPU管理并产生由内存取出的每条指令的操作信号&#xff0c;把…

FPGA学习笔记(八)同步/异步信号的打拍分析及处理

系列文章目录 一、FPGA学习笔记&#xff08;一&#xff09;入门背景、软件及时钟约束 二、FPGA学习笔记&#xff08;二&#xff09;Verilog语法初步学习(语法篇1) 三、FPGA学习笔记&#xff08;三&#xff09; 流水灯入门FPGA设计流程 四、FPGA学习笔记&#xff08;四&…

花十分钟用Python写了个蹭WiFi的软件,于是获取了隔壁单身妹子的WiFi试了试效果,居然发现...

Python写一个免费蹭WiFi的神器前因后果注意事项主要代码效果展示怎么学好Python&#xff1f;前因后果 昨晚十点学姐跟我发消息说她家的WiFi 不知道为什么今天就很慢&#xff0c;让我赶紧去她家帮她看看&#xff0c;当时我就怒了&#xff0c;这大晚上的我都要睡觉了还给我整这破…

Qt翻译(本地化)坑总结

文章目录坑1&#xff1a;无法生成ts文件坑2&#xff1a;ts文件的中文乱码坑3&#xff1a;不能直接翻译全局变量、静态变量、符号常量字符串官方文档 Internationalization with Qt 贴一个比较好的总结 Qt中&#xff0c;软件多语言国际化翻译的方法与步骤 坑1&#xff1a;无法生…

[Redis] Redis实战

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

[附源码]java毕业设计实践教学管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Echarts:好玩的timeline

Echarts是一个开源的可视化图表库&#xff0c;支持丰富的图表&#xff0c;官网中还有大量示例可以选择使用、参考。 其中比较有趣的一个特性是可以把数据随时间变化而变化&#xff0c;其效果与一些视频中比较不同国家的国力随时间变化的排名变化的效果相似。 接下啦我们就实现…

linux下golang环境安装教程(学习笔记)

linux下golang环境安装教程&#xff08;学习笔记&#xff09; SSH远程登录linux服务器 安装 mercurial包 [rootlocalhost ~]# yum install mercurial 安装git包 [rootlocalhost ~]# yum install git 安装gcc【一般自带安装好了的】 [rootlocalhost ~]# yum install gcc …

黑*头条_第3章_文章详情前后端成形记

黑*头条_第3章_文章详情前后端成形记 文章目录黑*头条_第3章_文章详情前后端成形记文章详情前后端成形记1 分布式主键封装1.1 依赖导入1.2 配置文件1.3 枚举封装1.4 序列封装1.5 Client封装1.6 Config封装1.7 Sequences封装1.8 使用案例1.9 扩展自增表2 App文章详情2.1 功能需求…

Spring IOC源码:registerBeanPostProcessors 详解

前言 上篇文章介绍了后置处理器BeanFactoryPostProcessor的注册、实例化及执行操作&#xff0c;这节介绍一下另外一个后置处理器BeanPostProcessor。前者是针对BeanFactory工厂对象进行增上改查操作&#xff0c;在bean实例化之前&#xff0c;我们可以修改其定义。后者是对实例…

电脑重装系统蓝屏是什么原因

​电脑蓝屏是由于系统故障、致命的系统错误或系统崩溃而导致的现象&#xff0c;要想修复电脑蓝屏&#xff0c;关键是找出原因所在。为此&#xff0c;下面小编就给大家整理电脑蓝屏是什么原因。 原因1、虚拟内存不足造成系统多任务运算错误&#xff1a; 虚拟内存是Windows系统所…

(免费分享)基于springboot健康运动-带论文

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入013领取下载链接 ​开发工具&#xff1a;IDEA, mysql5.7 技术&#xff1a;springbootmybatis-plus 健康管理包括&#xff1a;健康体检、健康评估、健康促进和健康服务四大部分。具体来说健康管理就是由健康管理顾问…

13.4 GAS与攻击

目录1. 由GA砍出的第一刀2. 挥剑时的命中检测3. 完善&#xff1a;UI显示当前血量参考&#xff1a;1. 由GA砍出的第一刀 有了前面章节的经验&#xff0c;我们可以很容易创建一个专用于攻击的GA&#xff1a; 其中PlayMontageAndWait任务节点负责攻击动画及相应回调的绑定。 但是…