《Android 源码设计模式解析与实战》—— 单例设计模式

单例设计模式在软件开发迭代的过程中几乎每个开发小伙伴都接触、实践过。单例模式的普遍性让许多业务场景都有涉猎,比如ARouter中保存的routeUri及class的hashmap、保存系统Application Context的静态单例,承载单一功能的Manager等等,但是单例模式又是如此的重要,方便我们在虚拟机中操作同一个对象,保证数据的存在是唯一的。以下是《Android 源码设计模式解析与实战》一书中对于单例的总结,包含单例模式的创建形式、单例模式在Android系统中的实现、单例模式的优缺点。

单例模式创建的形式

  • 懒汉模式 方法synchronize
  • Double Check Lock 单例模式
  • 静态内部类单例模式
  • 枚举单例
  • 容器单例

单例模式Android 系统实现

  • Context.getSystemService,LayoutInflater、ServiceManger、ActivityManager等,利用ServiceFatcher懒加载创建service

单例模式的优缺点
优点:

  1. 由于单例模式在内存中只有一个实例,减少了对内存开支,特别是一个对象需要频繁地创建销毁时,而且创建或销毁是性能又无法优化,单例模式的优势就非常明显。
  2. 由于单例模式只生成一个实例,所以,减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决。
  3. 单例模式可以避免对资源的多重占用,例如一个写文件操作,由于只有一个实例存在内存中,避免对同一个资源文件的同事写操作。
  4. 单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如,可以设计一个单例类,负责所有数据表的映射处理。

缺点:

  1. 单例模式一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现。
  2. 单例对象如果持有Context,那么很容易引发内存泄露,此时需要注意传递给单例对象的Context最好是Application Context。

你可能感兴趣的:(《Android 源码设计模式解析与实战》—— 单例设计模式)