我正在做一个关于移动平台的小研究,我想知道Android使用了哪些设计模式?

例如,在iOS中,模型-视图-控制器与委托和其他模式一起被广泛使用。

Android使用什么模式,在哪里使用?

EDIT

我并不是要求在内核、dalvik等深层使用的设计模式,而是应用程序开发人员在开发应用程序时将遇到的模式。


当前回答

所有这些模式,MVC, MVVM, MVP和Presentation Model,都可以应用到Android应用中,但是如果没有第三方框架,就不容易得到组织良好的结构和干净的代码。

MVVM起源于PresentationModel。当我们将MVC、MVVM和Presentation Model应用到Android应用中时,我们真正想要的是有一个清晰的结构化项目,更重要的是更容易进行单元测试。

目前,如果没有第三方框架,通常会有大量代码(如addXXListener()、findViewById()等),这不会增加任何业务价值。更重要的是,你必须运行Android单元测试,而不是正常的JUnit测试,后者需要很长时间才能运行,并且使单元测试有些不切实际。

基于这些原因,几年前我们开始了一个开源项目RoboBinding——一个用于Android平台的数据绑定表示模型框架。RoboBinding帮助您编写更易于阅读、测试和维护的UI代码。RoboBinding消除了对addXXListener等不必要代码的需求,并将UI逻辑转移到表示模型(Presentation Model),这是一个POJO,可以通过正常的JUnit测试进行测试。RoboBinding本身带有300多个JUnit测试,以确保其质量。

其他回答

所有这些模式,MVC, MVVM, MVP和Presentation Model,都可以应用到Android应用中,但是如果没有第三方框架,就不容易得到组织良好的结构和干净的代码。

MVVM起源于PresentationModel。当我们将MVC、MVVM和Presentation Model应用到Android应用中时,我们真正想要的是有一个清晰的结构化项目,更重要的是更容易进行单元测试。

目前,如果没有第三方框架,通常会有大量代码(如addXXListener()、findViewById()等),这不会增加任何业务价值。更重要的是,你必须运行Android单元测试,而不是正常的JUnit测试,后者需要很长时间才能运行,并且使单元测试有些不切实际。

基于这些原因,几年前我们开始了一个开源项目RoboBinding——一个用于Android平台的数据绑定表示模型框架。RoboBinding帮助您编写更易于阅读、测试和维护的UI代码。RoboBinding消除了对addXXListener等不必要代码的需求,并将UI逻辑转移到表示模型(Presentation Model),这是一个POJO,可以通过正常的JUnit测试进行测试。RoboBinding本身带有300多个JUnit测试,以确保其质量。

Android框架中使用了多种模式,例如:

广播接收器使用观察者模式 远程服务调用使用代理模式 视图和视图组使用复合模式 媒体框架使用立面模式

Binder对死亡接收人通知使用“观察者模式”。

Android也使用ViewHolder设计模式。

它用于提高滚动ListView时的性能。

ViewHolder设计模式使您能够访问每个列表项视图,而不需要进行查找,从而节省宝贵的处理器周期。具体来说,它避免了在ListView滚动期间频繁调用findViewById(),这将使其平滑。

在Android中,“工作队列处理器”模式通常用于从应用程序主线程中卸载任务。

示例:IntentService类的设计。

IntentService接收intent,启动工作线程,并适当地停止服务。所有请求都在一个工作线程上处理。