【Android面试】设计模式专题

文章目录

    • [1. Android 中单例模式在系统源码与实际开发中分别有哪些典型应用?如何写出线程安全且无内存泄漏的单例?](#1. Android 中单例模式在系统源码与实际开发中分别有哪些典型应用?如何写出线程安全且无内存泄漏的单例?)
    • [2. 观察者模式在 Android 源码与业务开发中如何体现?LiveData 相比传统观察者有什么优势?](#2. 观察者模式在 Android 源码与业务开发中如何体现?LiveData 相比传统观察者有什么优势?)
    • [3. 建造者模式为什么被大量用于 Android 组件构建?实际开发中哪些场景适合使用?](#3. 建造者模式为什么被大量用于 Android 组件构建?实际开发中哪些场景适合使用?)
    • [4. 工厂模式在 Android 源码与架构设计中如何使用?如何用工厂实现多渠道 / 多实现解耦?](#4. 工厂模式在 Android 源码与架构设计中如何使用?如何用工厂实现多渠道 / 多实现解耦?)
    • [5. 责任链模式在 Android 中的典型体现是什么?实际开发如何利用它做统一拦截?](#5. 责任链模式在 Android 中的典型体现是什么?实际开发如何利用它做统一拦截?)
    • [6. 适配器模式在 Android 中为什么是列表控件的核心?实际开发如何实现多类型列表?](#6. 适配器模式在 Android 中为什么是列表控件的核心?实际开发如何实现多类型列表?)
    • [7. 策略模式在 Android 源码与业务开发中如何体现?能解决什么代码问题?](#7. 策略模式在 Android 源码与业务开发中如何体现?能解决什么代码问题?)
    • [8. 装饰者模式在 Android 源码结构中如何体现?实际开发如何用它增强功能?](#8. 装饰者模式在 Android 源码结构中如何体现?实际开发如何用它增强功能?)

资料: 面经:设计模式
单例模式/观察者模式/建造者模式/工厂模式/责任链模式/适配器模式/策略模式/装饰者模式

1. Android 中单例模式在系统源码与实际开发中分别有哪些典型应用?如何写出线程安全且无内存泄漏的单例?

  • 源码应用:LayoutInflater、ActivityManager、WindowManager 等系统服务均为单例;系统通过Binder 机制保证进程唯一
  • 实际开发:全局网络管理器、图片加载管理器、日志工具、缓存管理器、全局配置类
  • 最佳实现:静态内部类(Holder),线程安全、懒加载、无指令重排问题;Context 必须使用ApplicationContext,避免持有 Activity 导致泄漏

2. 观察者模式在 Android 源码与业务开发中如何体现?LiveData 相比传统观察者有什么优势?

  • 源码应用:View.setOnClickListener、ContentObserver、BroadcastReceiver、AdapterDataSetObserver
  • 实际开发:EventBus 事件分发、RxJava 响应式流、页面状态同步、列表数据刷新、登录状态全局通知
  • LiveData 优势:生命周期感知,自动解绑避免泄漏;数据粘性,页面重建可恢复最新状态;主线程分发,安全更新 UI

3. 建造者模式为什么被大量用于 Android 组件构建?实际开发中哪些场景适合使用?

  • 源码应用:AlertDialog.Builder、Notification.Builder、Intent 链式构建、Retrofit配置构建
  • 实际开发:网络请求配置、图片加载参数、弹窗配置、数据库查询构建、自定义 View 样式配置
  • 优势:多参数构造清晰、链式调用优雅、参数校验统一、对象不可变、易扩展

4. 工厂模式在 Android 源码与架构设计中如何使用?如何用工厂实现多渠道 / 多实现解耦?

  • 源码应用:BitmapFactory、LayoutInflater.from()、Retrofit.create()(动态代理工厂)
  • 实际开发:多渠道推送(华为 / 小米 / OPPO)、多平台支付(微信 / 支付宝)、网络框架切换(OkHttp/Volley)、日志实现切换
  • 设计方式:定义统一接口 → 多实现类 → 工厂类根据配置 / 渠道返回对应实例,避免大量 if‑else

5. 责任链模式在 Android 中的典型体现是什么?实际开发如何利用它做统一拦截?

  • 源码应用:OkHttp 拦截器链、View 触摸事件分发(dispatchTouchEvent)、Activity 启动流程拦截
  • 实际开发:网络请求统一拦截(加签名、加 Header、日志、重试、缓存)、权限申请拦截、埋点上报拦截、异常捕获拦截
  • 特点:请求逐级传递、每个节点可处理或转发、易于扩展、职责分离

6. 适配器模式在 Android 中为什么是列表控件的核心?实际开发如何实现多类型列表?

  • 源码应用:RecyclerView.Adapter、ListView.BaseAdapter、PagerAdapter
  • 实际开发:首页多布局流、聊天界面(文字 / 图片 / 语音)、订单列表、搜索结果页、Feed 流
  • 作用:将数据源与视图解耦;通过 getItemViewType 实现多布局,统一渲染逻辑

7. 策略模式在 Android 源码与业务开发中如何体现?能解决什么代码问题?

  • 源码应用:动画插值器 Interpolator、Bitmap 压缩策略、Comparator 排序策略。
  • 实际开发:图片加载策略(缓存 / 不缓存)、列表排序策略(时间 / 热度 / 距离)、支付策略、加密策略、网络缓存策略。
  • 解决:避免大量 if‑else/switch,易于扩展、可动态替换、符合开闭原则。

8. 装饰者模式在 Android 源码结构中如何体现?实际开发如何用它增强功能?

  • 源码应用:ContextWrapper(Activity/Service 都是装饰Context), BufferedInputStream、Retrofit 动态代理增强。
  • 实际开发:网络请求增强(日志、加密、重试)、图片加载增强(圆角、高斯模糊、缓存)、IO 流增强、权限包装。
  • 特点:不修改原类,动态扩展功能,保持核心类简洁。
相关推荐
三少爷的鞋2 小时前
别再写 BaseXXX 了:BaseActivity 和 BaseViewModel 正在毁掉你的架构
android
geovindu2 小时前
go: Abstract Factory Pattern
开发语言·后端·设计模式·golang
Trustport2 小时前
ArcGIS Maps SDK For Kotlin 加载Layout中的MapView出错
android·开发语言·arcgis·kotlin
EQ-雪梨蛋花汤2 小时前
【笔记】安卓毛玻璃效果(Blur)实现笔记(使用BlurView)(结尾附:源码)
android·笔记
木斯佳2 小时前
前端八股文面经大全:京东零售JDY前端一面(2026-04-14)·面经深度解析
前端·算法·设计模式·ai·断点续传
Bigger2 小时前
面试官问我:“AI 写代码比你快 100 倍,你的价值在哪?”
前端·面试·ai编程
郝学胜-神的一滴2 小时前
[系统设计] 新鲜事系统:写扩散与读扩散的实现与对比
java·设计模式·php·软件构建·需求分析·软件设计·系统设计
.NET修仙日记2 小时前
2026 .NET 面试八股文:高频题 + 答案 + 原理(进阶核心篇)
面试·职场和发展·c#·.net·.net core·微软技术·webapi
StackNoOverflow4 小时前
MySQL Explain 返回列详解:从入门到实战,附 SQL 与避坑大全
android