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

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


一、创建型模式

1. 单例模式(Singleton)

  • 定义:确保一个类只有一个实例,并提供全局访问点。
  • 应用场景
    • 全局状态管理(如用户信息、配置信息)。
    • 资源密集型对象(如网络请求客户端、数据库连接)。
    • Android中的Application类本质是单例。
  • 示例代码
    class NetworkManager private constructor() {
        companion object {
            val instance: NetworkManager by lazy { NetworkManager() }
        }
        // 网络请求相关方法
    }
    

2. 工厂模式(Factory)

  • 定义:定义一个创建对象的接口,由子类决定实例化哪个类。
  • 应用场景
    • BitmapFactory用于创建Bitmap对象。
    • 自定义组件时,通过工厂创建不同类型的View。
  • 示例代码
    interface ViewFactory {
        fun createView(): View
    }
    class TextViewFactory : ViewFactory {
        override fun createView(): View = TextView(context)
    }
    

3. 建造者模式(Builder)

  • 定义:分步骤构建复杂对象,隐藏创建细节。
  • 应用场景
    • Android中的AlertDialog.Builder
    • 自定义复杂对象的构建过程(如Request对象)。
  • 示例代码
    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的差异。
  • 示例代码
    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实现跨进程通信)。
    • 权限检查代理(如网络请求前检查权限)。
  • 示例代码
    class ImageLoaderProxy(private val realImageLoader: ImageLoader) : ImageLoader {
        override fun loadImage(url: String) {
            if (hasPermission()) {
                realImageLoader.loadImage(url)
            } else {
                requestPermission()
            }
        }
    }
    

6. 组合模式(Composite)

  • 定义:将对象组合成树形结构,表示“部分-整体”的层次结构。
  • 应用场景
    • Android的ViewViewGroup层级关系。
  • 示例代码
    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)。
  • 示例代码
    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)

  • 定义:定义一系列算法,将每个算法封装起来并使其可互换。
  • 应用场景
    • 支付方式切换(如支付宝、微信支付)。
    • 排序算法动态选择。
  • 示例代码
    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)。
    • 日志过滤链。
  • 示例代码
    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)到业务逻辑(如支付策略、事件分发)均有体现。掌握这些模式能显著提升代码质量和开发效率。建议结合具体项目实践,逐步深入理解每种模式的应用场景和实现方式。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易 士心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值