首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Android常用的设计模式及其应用场景

Android常用的设计模式及其应用场景

作者头像
木易士心
发布2025-11-30 08:55:44
发布2025-11-30 08:55:44
100
举报

在Android开发中,设计模式被广泛应用于框架设计、第三方库实现以及业务代码中,目的是提高代码复用性、可维护性和扩展性。以下是Android中常用的设计模式及其应用场景:


一、创建型模式

1. 单例模式(Singleton)

定义:确保一个类只有一个实例,并提供全局访问点。

应用场景

  • 全局状态管理(如用户信息、配置信息)。
  • 资源密集型对象(如网络请求客户端、数据库连接)。
  • Android中的Application类本质是单例。

示例代码

代码语言:javascript
复制
class NetworkManager private constructor() {
    companion object {
        val instance: NetworkManager by lazy { NetworkManager() }
    }
    // 网络请求相关方法
}

2. 工厂模式(Factory)

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

应用场景

  • BitmapFactory用于创建Bitmap对象。
  • 自定义组件时,通过工厂创建不同类型的View。

示例代码

代码语言:javascript
复制
interface ViewFactory {
    fun createView(): View
}
class TextViewFactory : ViewFactory {
    override fun createView(): View = TextView(context)
}

3. 建造者模式(Builder)

定义:分步骤构建复杂对象,隐藏创建细节。

应用场景

  • Android中的AlertDialog.Builder
  • 自定义复杂对象的构建过程(如Request对象)。

示例代码

代码语言:javascript
复制
class AlertDialogBuilder {
    private var title: String = ""
    private var message: String = ""
    fun setTitle(title: String): AlertDialogBuilder {
        this.title = title
        return this
    }
    fun setMessage(message: String): AlertDialogBuilder {
        this.message = message
        return this
    }
    fun build(): AlertDialog {
        return AlertDialog(title, message)
    }
}

二、结构型模式

4. 适配器模式(Adapter)

定义:将一个接口转换为另一个接口,使不兼容的类可以协作。

应用场景

  • RecyclerView.Adapter将数据转换为UI组件。
  • 适配第三方库与Android原生API的差异。

示例代码

代码语言:javascript
复制
class MyAdapter(private val dataList: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        // 创建ViewHolder
    }
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(dataList[position])
    }
    override fun getItemCount(): Int = dataList.size
}

5. 代理模式(Proxy)

定义:为其他对象提供一种代理以控制对这个对象的访问。

应用场景

  • Android中的Binder机制(AIDL实现跨进程通信)。
  • 权限检查代理(如网络请求前检查权限)。

示例代码

代码语言:javascript
复制
class ImageLoaderProxy(private val realImageLoader: ImageLoader) : ImageLoader {
    override fun loadImage(url: String) {
        if (hasPermission()) {
            realImageLoader.loadImage(url)
        } else {
            requestPermission()
        }
    }
}

6. 组合模式(Composite)

定义:将对象组合成树形结构,表示“部分-整体”的层次结构。

应用场景

  • Android的ViewViewGroup层级关系。

示例代码

代码语言:javascript
复制
abstract class View {
    abstract fun render()
}
class TextView(context: Context) : View() {
    override fun render() { /* 渲染文本 */ }
}
class LinearLayout(context: Context) : View() {
    private val children = mutableListOf<View>()
    fun addView(view: View) { children.add(view) }
    override fun render() {
        for (child in children) {
            child.render()
        }
    }
}

三、行为型模式

7. 观察者模式(Observer)

定义:定义对象间的一对多依赖关系,当一个对象状态变化时,所有依赖者自动更新。

应用场景

  • LiveDataViewModel的协同工作。
  • 广播接收器(BroadcastReceiver)。

示例代码

代码语言:javascript
复制
class NewsSubject {
    private val observers = mutableListOf<NewsObserver>()
    fun addObserver(observer: NewsObserver) {
        observers.add(observer)
    }
    fun removeObserver(observer: NewsObserver) {
        observers.remove(observer)
    }
    fun notifyObservers() {
        for (observer in observers) {
            observer.update()
        }
    }
}
interface NewsObserver {
    fun update()
}

8. 策略模式(Strategy)

定义:定义一系列算法,将每个算法封装起来并使其可互换。

应用场景

  • 支付方式切换(如支付宝、微信支付)。
  • 排序算法动态选择。

示例代码

代码语言:javascript
复制
interface PaymentStrategy {
    fun pay(amount: Double)
}
class AlipayStrategy : PaymentStrategy {
    override fun pay(amount: Double) { /* 支付宝支付逻辑 */ }
}
class WeChatPayStrategy : PaymentStrategy {
    override fun pay(amount: Double) { /* 微信支付逻辑 */ }
}
class PaymentContext(private var strategy: PaymentStrategy) {
    fun executePayment(amount: Double) {
        strategy.pay(amount)
    }
}

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

定义:将请求的发送者和接收者解耦,使多个对象都有机会处理请求。

应用场景

  • Android事件分发机制(onTouchEvent)。
  • 日志过滤链。

示例代码

代码语言:javascript
复制
abstract class Handler {
    private var successor: Handler? = null
    fun setSuccessor(successor: Handler) {
        this.successor = successor
    }
    abstract fun handleRequest(request: String)
}
class ConcreteHandler1 : Handler() {
    override fun handleRequest(request: String) {
        if (/* 条件满足 */) {
            // 处理请求
        } else {
            successor?.handleRequest(request)
        }
    }
}

四、架构模式

10. MVC(Model-View-Controller)

  • 定义
    • Model:数据和业务逻辑(如数据库操作、网络请求)。
    • View:用户界面(XML布局)。
    • Controller:协调Model和View(Activity/Fragment)。
  • 问题:传统MVC中Activity职责过重,容易成为“上帝类”。

11. MVP(Model-View-Presenter)

  • 定义
    • Presenter:负责业务逻辑,独立于View。
    • View:仅负责UI展示,通过接口与Presenter通信。
    • Model:数据层,与MVC相同。
  • 优势:解耦View和业务逻辑,便于单元测试。

12. MVVM(Model-View-ViewModel)

  • 定义
    • ViewModel:暴露数据和命令,通过双向绑定(如DataBindingUtil)与View通信。
    • 优势:减少View的代码量,支持数据自动更新。

五、其他常用模式

13. 代理模式(AIDL)

  • Android跨进程通信(IPC)的核心机制,通过AIDL生成代理类。

14. 外观模式(Facade)

  • 简化复杂子系统的接口,如WindowManager对外提供统一的窗口管理接口。

15. 享元模式(Flyweight)

  • 通过共享技术减少对象数量,如TextView复用相同的Typeface对象。

六、设计原则在Android中的应用

  1. 单一职责原则:一个类只负责一项任务(如ViewModel仅处理UI逻辑)。
  2. 开闭原则:对扩展开放,对修改关闭(如通过接口扩展功能)。
  3. 依赖倒置原则:高层模块依赖抽象(如Activity依赖接口而非具体实现)。
  4. 里氏替换原则:子类应能替换父类(如自定义View继承View并扩展功能)。

总结

设计模式在Android开发中无处不在,从框架设计(如RecyclerViewLiveData)到业务逻辑(如支付策略、事件分发)均有体现。掌握这些模式能显著提升代码质量和开发效率。建议结合具体项目实践,逐步深入理解每种模式的应用场景和实现方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、创建型模式
  • 二、结构型模式
  • 三、行为型模式
  • 四、架构模式
  • 五、其他常用模式
  • 六、设计原则在Android中的应用
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档