【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 流增强、权限包装。
  • 特点:不修改原类,动态扩展功能,保持核心类简洁。
相关推荐
召钱熏6 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
Randyliu6 小时前
20260508-Agent搭建记录以及对ReAct框架的理解
面试·agent
杉氧6 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄6 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
ZzT7 小时前
公司用 AI 筛简历,他写了个 AI 帮你挑公司
面试·aigc·ai编程
落魄Android在线炒饭7 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
PBitW7 小时前
GPT训练我的第四天,被打惨了!!!😭😭😭
前端·javascript·面试
如此风景7 小时前
Kotlin Flow操作符学习
android·kotlin
plainGeekDev8 小时前
GreenDAO → Room
android·java·kotlin
weiggle9 小时前
第八篇:ViewModel + Compose——生产级状态管理实践
android