android架构

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节中已经进行了详细的阐述。

坚持原创技术分享,您的支持将鼓励我继续创作!