android系统设计模式

server/2024/9/25 17:14:28/

Android官方架构组件介绍之LifeCycle,Android架构组件一共包括以下几个:

  • LifeCycle : 与Activity和Fragment的生命周期有关
  • LiveData :异步可订阅数据,也是生命周期感知
  • ViewModel :视图数据持有模型,也是生命周期感知
  • Room :SQLite抽象层,用于简化SQLite数据存储

官网

设计原则

Android应用程序的开发使用Java编写,在架构上使用MVC,鼓励组件之间的弱耦合。开发出编写可重用、可扩展、可维护、灵活性高的代码需要遵循以下原则。
● “开—闭”原则(OCP):一个软件实体应当对扩展开放,对修改关闭。这个原则说的是,在设计一个模块时,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当允许在不必修改源代码的情况下改变这个模块的行为。
● 里氏代换原则(LSP):一个软件实体如果使用的是一个基类的话,那么一定使用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。
● 依赖倒转原则(DIP):要依赖于抽象,不要依赖于具体。
● 接口隔离原则(ISP):使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当是建立在最小的接口上的。
● 合成/聚合复用原则(CARP):又称合成复用原则(CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。简而言之就是:要尽量使用合成/聚合,尽量不使用继承。
● 迪米特法则(LoD):又称最少知识原则(LKP),是说一个对象应当对其他对象尽可能少的了解。狭义的迪米特法则是指如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类,可以通过第三者转发这个调用。广义的迪米特法则是指一个模块设计得好坏的一个重要的标志就是该模块在多大的程度上将自己的内部数据与实现有关的细节隐藏起来。信息的隐藏非常重要的原因在于,它可以使各个子系统之间脱耦,从而允许它们独立地被开发、优化、使用、阅读及修改。

设计模式

Android中最明显的简单工厂模式之一就是获取服务的系统方法“getSystemService”,例如,获得SensorManager的具体代码如下所示。

Android与工厂方法模式

在Android的Activity、Service等核心组件中,都定义了onCreate()方法,例如,当我们要显示用户界面时,一般都会在onCreate()使用setContentView这个方法,这个方法是在Activity中定义的,在编写具体的

Android与抽象工厂模式

在Android的应用程序开发中涉及到的IPC通信就是抽象工厂模式很好的

Android与单例模式

单例模式在Android中无所不在,例如,对服务的管理者ServiceManager就采用了单例模式,具体代码如下所示。

构造器模式

在Android中,AlertDialog的构造是建造者模式一个非常经典的实现,具体代码如下所示。

装饰器模式

在Java I/O库的设计和实现中就很好地使用了装饰模式。JDK提供的java.io包中使用了Decorator模式来实

外观模式

是一种得到广泛应用的模式,例如,我们熟知的MVC模式就采用了外观模式。在MVC架构模式中,每一层并不需要知道其他层次的细节,只是通过层与层之间的接口调用即可,这极大方便了应用开发

Facade设计模式

在JNI中的美妙应用,如下图所示。

享元模式

在Android中,享元模式非常明显的应用是在SQLite数据库数据查询时,当我们向SQLite发起查询时,SQL语句会被编译和缓存,此时即享元模式。

适配器模式

Android中的ListView是对适配器模式非常好的说明

代理模式

Android中两个进程间的通信,如 框架在支持Android应用程序间的跨进程通信时就是基于Binder的,要实现进程间通信的双方只需要遵循共同的AIDL接口即可,而在背后是使用了代理模式的,下面举具体的例子说明。

组合模式

Android中的View布局树是组合模式非常生动直观的说明

模板方式模式

Android中的四大组件的生命周期方法是模板方法模式的绝妙体现。

观察者模式

Android中观察者模式的实现可谓比比皆是,例如,一个Button的ButtonClickListener就是观察者,当用户单击该Button时,ButtonClickListener就会做出相应的响应。

状态模式

当Activity执行不同的方法时,会处于相应的状态中,这就是状态模式的应用。

Android与策略模式

Android中的ListView是策略模式非常好的说明,ListView汇总会有很多Items,每个处理会根据特定Item的ID可以选择不同的策略进行处理。我们在5.4节中已经进行了详细的阐述。


http://www.ppmy.cn/server/116917.html

相关文章

算法-最少箭引爆气球(贪心+区间)

leetcode题目链接 这道题思路很简单,就是一个贪心,甚至都不需要合并区间。 开始需要对气球的结束坐标排序一下,然后定义一个end指向当前箭的最远位置。 然后开始遍历数组,如果出现区间起始位置比end大,则说明需要再…

鸿蒙NEXT生态应用核心技术理念:一次开发,多端部署

在万物互联时代,应用开发者也面临设备底座从手机单设备到全场景多设备的转变,通过全场景多设备作为全新的底座,为消费者带来万物互联时代更为高效、便捷的体验。 在万物智联时代重要机遇期,鸿蒙结合移动生态发展的趋势&#xff0…

GIS可视化软件:地理信息与遥感领域中的洞察之眼

在地理信息与遥感技术的广阔天地中,可视化软件如同一双洞察世界的明眸,将复杂的数据编织成生动、直观的画卷,为我们揭示地球的奥秘与城市的律动。本文将深入挖掘其技术核心、应用实例、未来趋势,探讨可视化软件如何为地理信息与遥…

系统架构师考试学习笔记第五篇——架构设计补充知识(23)知识产权

本章考点: 第23课时主要学习国家与行业标准、知识产权的内容。根据考试大纲,本课时知识点会涉及单项选择题,按以往全国计算机技术与软件专业技术资格(水平)考试的出题规律约占3分。本课时内容属于补充知识范畴,考题类型固定。本课时知识架构如图23.1所示。 一、知识…

vue原理分析(十四)研究new Vue()中的 initProvide

在Vue.prototype._init 中有一些init函数,今天我们来研究这些init函数 Vue.prototype._init function (options) {......{initProxy(vm);}......initLifecycle(vm);initEvents(vm);initRender(vm);callHook$1(vm, beforeCreate, undefined, false /* setContext *…

时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测

时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测 目录 时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Matlab实现GA-CNN遗传算法优化卷积神经网络时间序列预测&#xff…

[OpenGL]使用OpenGL绘制三角形

一、简介 本文介绍了如何在linux/win(wsl2)环境下,使用GLFWGLAD实现绘制三角形。 本文内容基本根据LearnOpengGL-入门-你好,三角形整理完成,读者也可以参考LearnOpengGL-入门-你好,三角形自行学习如何使用OpenGL绘制三角形。 按…

表格多列情况下,loading不显示问题

问题描述: 用element plus 做得表格,如下图,列数较多,且部分表格内容显示比较复杂,数据量中等的情况下,有一个switch 按钮,切换部分列的显示和隐藏,会发现,切换为显示的时…