当前位置: 首页 > news >正文

Android 设计模式实战手册(Kotlin 实战版)

目录

创建型模式(5种)

  1. 单例模式(Singleton)

  2. 工厂方法模式(Factory Method)

  3. 抽象工厂模式(Abstract Factory)

  4. 建造者模式(Builder)

  5. 原型模式(Prototype)

结构型模式(7种)

  1. 适配器模式(Adapter)

  2. 装饰器模式(Decorator)

  3. 代理模式(Proxy)

  4. 外观模式(Facade)

  5. 桥接模式(Bridge)

  6. 组合模式(Composite)

  7. 享元模式(Flyweight)

行为型模式(11种)

  1. 观察者模式(Observer)

  2. 策略模式(Strategy)

  3. 命令模式(Command)

  4. 模板方法模式(Template Method)

  5. 责任链模式(Chain of Responsibility)

  6. 状态模式(State)

  7. 解释器模式(Interpreter)

  8. 中介者模式(Mediator)

  9. 访问者模式(Visitor)

  10. 备忘录模式(Memento)

  11. 迭代器模式(Iterator)


第一部分:创建型模式

序号 模式 Android 实例
1 单例模式 (Singleton) Retrofit、Glide
2 工厂方法模式 (Factory Method) Fragment.newInstance()
3 抽象工厂模式 (Abstract Factory) 不同 Theme 创建 View
4 建造者模式 (Builder) AlertDialog、OkHttp
5 原型模式 (Prototype) Bundle、Intent.clone

1️⃣ 单例模式(Singleton)

设计意图:保证一个类只有一个实例,并提供全局访问点。

Android 场景

  • Retrofit 单例管理网络请求

  • Glide 图片加载单例

  • App 全局配置对象

Kotlin 实战示例

// Retrofit 单例封装
object RetrofitManager {val retrofit by lazy {retrofit2.Retrofit.Builder().baseUrl("https://api.example.com/").addConverterFactory(retrofit2.converter.gson.GsonConverterFactory.create()).build()}val apiService by lazy { retrofit.create(ApiService::class.java) }
}

优缺点

  • ✅ 优点:全局唯一,节省资源,懒加载可提高性能

  • ❌ 缺点:难以单元测试,可能隐藏全局状态依赖


2️⃣ 工厂方法模式(Factory Method)

设计意图:定义一个创建对象的接口,由子类决定实例化哪一个类。

Android 场景

  • Fragment.newInstance()

  • 不同类型 View / ViewHolder 创建

Kotlin 实战示例

// Fragment 工厂方法
class UserFragment : Fragment() {companion object {fun newInstance(userId: String): UserFragment {val fragment = UserFragment()val bundle = Bundle()bundle.putString("userId", userId)fragment.arguments = bundlereturn fragment}}
}

优缺点

  • ✅ 优点:解耦对象创建逻辑,增加扩展性

  • ❌ 缺点:增加类的复杂度


3️⃣ 抽象工厂模式(Abstract Factory)

设计意图:提供一个创建一系列相关或依赖对象的接口,而无需指定具体类。

Android 场景

  • 不同主题风格下创建 Button / TextView / RecyclerView

Kotlin 实战示例

interface ThemeFactory {fun createButton(): Buttonfun createTextView(): TextView
}class LightThemeFactory(val context: Context): ThemeFactory {override fun createButton() = Button(context).apply { setBackgroundColor(Color.WHITE) }override fun createTextView() = TextView(context).apply { setTextColor(Color.BLACK) }
}class DarkThemeFactory(val context: Context): ThemeFactory {override fun createButton() = Button(context).apply { setBackgroundColor(Color.BLACK) }override fun createTextView() = TextView(context).apply { setTextColor(Color.WHITE) }
}

优缺点

  • ✅ 优点:易于切换产品族

  • ❌ 缺点:增加类数量,使用复杂


4️⃣ 建造者模式(Builder)

设计意图:将复杂对象的构建与表示分离,使同样的构建过程可以创建不同表示。

Android 场景

  • AlertDialog.Builder

  • OkHttpClient.Builder

Kotlin 实战示例

// AlertDialog 示例
val dialog
http://www.dtcms.com/a/494405.html

相关文章:

  • Android thermal (5)_cooling device(下)
  • 活字格低代码平台实现移动端应用(安卓 /iOS)打包的技术方案与实践指南
  • SpringBoot电子商城系统
  • 解析 Qt Remote Objects:从框架原理到 Repcs 实践,以正点原子 RK3588 UI 系统为例
  • 【底层机制】【Android】Binder架构与原理
  • 揭阳市住房和城乡建设局网站网站类游戏网站开发
  • DeviceNet 转 MODBUS TCP罗克韦尔 ControlLogix PLC 与上位机在汽车零部件涂装生产线漆膜厚度精准控制的通讯配置案例
  • 【STM32项目开源】基于STM32的智能衣柜系统
  • python基于web的汽车班车车票管理系统/火车票预订系统/高铁预定系统 可在线选座
  • ssh终端管理多个k8s集群,快速切换配置
  • 景德镇建站公司全国建筑四库一平台
  • 奥运网站模板wordpress在 分栏
  • toLua[七] Examples 06_LuaCoroutine2分析
  • CAD如何生成等高线
  • Java并发工具类详解:Semaphore、CyclicBarrier与CountDownLatch
  • 御剑问情_附带自动假人版_大型3D仙侠类剧情闯关手游_Linux服务端_通用视频架设教程_GM授权网页后台_运营网页后台_安卓苹果IOS双端
  • 基于信息保留与细粒度特征聚合的无人机目标检测
  • AINode部署全指南:从独立部署到Kubernetes集群部署
  • PYcharm——获取天气
  • Kafka多网卡环境配置
  • TypeScript 与淘宝 API:构建类型安全的商品数据查询前端 / Node.js 服务
  • 网站备案名称要求郴州网站排名优化
  • 百度做一个网站多少钱sns营销
  • List<map<String,Object>下划线转驼峰
  • List.subList() 返回值为什么不能强转成 ArrayList
  • phpcms网站转移网站关键词百度排名在下降
  • mac使用本地jdk启动elasticsearch解决elasticsearch启动时jdk损坏问题
  • 手机在初次联网的底层流程-关于EPC信令附着
  • 2025年红米手机上市了哪些款式,本别包含哪些版本,就上市时间、硬件参数、性能、价格等方面进行对比,加入横向竞品对比分析,按价位段划分推荐人群。
  • Go Web 编程快速入门 02 - 认识 net/http 与 Handler 接口