【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 流增强、权限包装。
  • 特点:不修改原类,动态扩展功能,保持核心类简洁。
相关推荐
挨踢ren1 小时前
单例模式:C++实现与多线程安全
c++·设计模式
Raink老师2 小时前
用100道题拿下你的算法面试(链表篇-4):合并 K 个有序链表
算法·链表·面试
用户86022504674722 小时前
Jetpack ViewModel 入门与实践
android
风止何安啊2 小时前
手写 URL 解析器,面试官到底想考什么?
前端·javascript·面试
随遇丿而安2 小时前
第3周:按钮这件小事,真正麻烦的是“点完以后”
android
ximu_polaris3 小时前
设计模式(C++)-行为型模式-访问者模式
c++·设计模式·访问者模式
峥嵘life3 小时前
五一南昌第三天游玩记录:梅景寻芳,母校忆旧,摩天轮揽夜
android
workflower4 小时前
农业信息化
大数据·人工智能·设计模式·机器人·软件工程
qq_452396235 小时前
第三篇:《JMeter断言:验证接口响应正确性》
android·jmeter
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第38题:两个对象的hashCode()相同,则 equals()是否也一定为 true?
java·开发语言·后端·面试·hash-index