Android源码中广泛使用了多种设计模式,以解决不同场景下的架构设计需求。以下是几个常见的设计模式及其在Android中的应用:
1. 单例模式 (Singleton Pattern)
应用: 单例模式确保一个类只有一个实例,并提供一个全局访问点。
示例:
Context
:Context
类的实现(尤其是ApplicationContext
)经常以单例的方式使用,以确保全局唯一的应用上下文实例。ActivityManager
:ActivityManager
是 Android 中管理应用进程和活动的单例实例,通过ActivityManager.getInstance()
获取实例。
2. 工厂模式 (Factory Pattern)
应用: 工厂模式用于创建对象,而不暴露创建逻辑给客户端。
示例:
LayoutInflater
:LayoutInflater
是 Android 中用于从 XML 文件中创建视图对象的工厂类。它隐藏了具体的视图实例化细节,只提供统一的接口来创建视图。
3. 观察者模式 (Observer Pattern)
应用: 观察者模式用于定义对象间的一对多依赖关系,当一个对象状态发生变化时,所有依赖对象都会收到通知并自动更新。
示例:
BroadcastReceiver
和IntentFilter
:BroadcastReceiver
用于监听系统或应用内的广播事件,并在事件发生时做出响应。IntentFilter
用于注册感兴趣的事件,体现了典型的观察者模式。ContentObserver
: 当数据库或其他内容提供者的数据发生变化时,ContentObserver
会收到通知,并执行相应操作。
4. 适配器模式 (Adapter Pattern)
应用: 适配器模式用于将一个接口转换成客户端期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以协同工作。
示例:
RecyclerView.Adapter
:RecyclerView
的适配器模式用于将数据绑定到视图项上。RecyclerView.Adapter
提供了视图与数据之间的桥梁,使得RecyclerView
可以处理不同类型的数据源。ArrayAdapter
:ArrayAdapter
是一种通用适配器,用于将数组或列表数据绑定到ListView
或Spinner
。
5. 模板方法模式 (Template Method Pattern)
应用: 模板方法模式在超类中定义算法的骨架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。
示例:
AsyncTask
:AsyncTask
类使用模板方法模式来处理后台线程中的任务执行流程。doInBackground()
、onPreExecute()
、onPostExecute()
等方法都是模板方法模式的一部分,开发者可以通过覆写这些方法来定制任务执行的具体逻辑。
6. 代理模式 (Proxy Pattern)
应用: 代理模式用于为其他对象提供一种代理,以控制对这个对象的访问。
示例:
Binder
:Binder
是 Android 的核心组件之一,用于进程间通信(IPC)。它使用代理模式为远程服务提供本地代理,以便客户端可以透明地调用远程服务的方法。
7. 责任链模式 (Chain of Responsibility Pattern)
应用: 责任链模式通过将请求沿着一条链传递,直到有对象处理它。
示例:
View
的事件分发机制: Android 的View
系统中的触摸事件(如onTouchEvent()
、onInterceptTouchEvent()
)采用了责任链模式。触摸事件会在视图层级中逐级传递,直到某个视图处理该事件。
8. 装饰者模式 (Decorator Pattern)
应用: 装饰者模式用于在不改变对象结构的情况下动态地给对象添加职责。
示例:
InputStream
和OutputStream
: 在 Java 和 Android 中,InputStream
和OutputStream
的子类如BufferedInputStream
、DataInputStream
等都使用了装饰者模式,为基本流对象添加了更多的功能。
9. 状态模式 (State Pattern)
应用: 状态模式允许对象在内部状态发生变化时改变其行为,对象看起来似乎修改了它的类。
示例:
MediaPlayer
: Android 的MediaPlayer
类在不同的状态(如播放、暂停、停止)下表现出不同的行为。每种状态对应不同的操作集,使用状态模式来处理这些状态变化。
10. 策略模式 (Strategy Pattern)
应用: 策略模式用于定义一系列算法,并将它们封装在独立的类中,使它们可以相互替换。
示例:
TextView
的文本换行策略: 在 Android 中,TextView
的换行策略(如SingleLine
、MultiLine
)可以被动态设置,这种可插拔的换行策略体现了策略模式的应用。
这些设计模式帮助Android框架实现了高内聚、低耦合的代码架构,增强了系统的可维护性、可扩展性和灵活性。