【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 流增强、权限包装。
  • 特点:不修改原类,动态扩展功能,保持核心类简洁。
相关推荐
黄林晴20 分钟前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android
恋猫de小郭40 分钟前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
程序员爱钓鱼1 小时前
Go 开发环境安装(Windows、macOS、Linux)
后端·面试·go
触底反弹2 小时前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
uzong8 小时前
一个好的面试官,应该让候选人感到被尊重
面试
触底反弹12 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
沉默王二13 小时前
腾讯一面,我霸气反问:“你说你们在做Agent项目,说说 SubAgent、Plan 模式、Skill 调用这些你们都是怎么做的?”面试官一直在擦汗。。
面试·agent·ai编程
HLC++14 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼17 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
程序员Rock17 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机