深度认识单例模式;在Android源码中的应用

前言

身为程序员,你可能没有系统的学习过设计模式,但是你一定知道单例模式,因为它相对简单,而且最常被大家所用到。既然大家都用到过,也都知道为什么我还要单独列出一篇文章来写呢?

因为绝大部分开发者平时对单例模式的认识,可能仅仅停留在“会用”的阶段。为什么会有这个模式?为什么要用这个模式?在哪里用单例模式最合适?乱用了会有什么负面影响?

这些可能大多数人都一知半解。今天就让我们大家一起来扒光单例模式的外衣,有深度的认识一下单例模式。

通过这篇文章你能学到什么

(建议你可以带着问题去学习)

  1. 单例模式的定义

  2. 单例模式在Android源码中的应用

  3. 单例模式的九种写法以及优劣对比

  4. 单例模式的使用场景

  5. 单例模式存在的缺点

  6. 接下来我们就一起进入今天的学习了

单例模式的定义

在学单例模式之前,我想大家都会自己问自己:“单例模式存在的意义是什么?我们为什么要用单例模式?”

众所周知,在古代封建社会,一个国家都只有一个国王或者叫皇帝。我们在这个国家的任何一个地方,只要提起国王,大家都知道他是谁。因为国王是唯一的。其实这个就是单例模式的核心思想:保证对象的唯一性。

单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式是一种对象创建型模式。

从其定义我们可以看出来单例模式存在三个要点:

1、实例唯一性
2、自行创建
3、全局访问

如何设计一个优秀的单例模式其实也是围绕着这三点来的。

说了这么多了,还不知道单例模式到底啥样呢?接下来我们一起来着手设计这个“国王”的单例类。我们先看一下单例模式的类图:

单例模式的类图看起来很简单,一个私有的当前类型的成员变量,一个私有的构造方法,一个 getInstance 方法,创建对象不再通过new 而通过 getInstance 让该类自行创建。相信我们大多数人使用的单例模式都是这种,因为太简单了。但是单例模式的写法可不止这一种。接下来我们一起来看一下单例模式的九种写法。

单例模式的九种写法

一、饿汉式(静态常量)

 

/**
* 饿汉式(静态常量)
*/
class King {
    private static final King kingInstance = new King();

    static King getInstance() {
        return kingInstance;
    }

    private King() {
    }
}
  • 优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。

  • 缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费。

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android源码应用程序的安装是由PackageManagerService (PMS) 负责实现的。PackageManagerService是Android系统的一个系统服务,负责管理应用程序的安装、卸载、更新和权限控制等操作。 具体而言,应用程序的安装过程涉及到以下几个关键的类和组件: 1. PackageManagerService (PMS):PMS是系统服务的实现类,负责处理应用程序的安装、卸载、更新等操作。它通过解析APK文件获取应用程序的信息,然后将相关信息记录在系统的包管理器。 2. PackageInstaller:PackageInstaller是一个应用程序安装器,用于处理用户通过界面(如Google Play商店或系统文件管理器)安装应用程序的请求。它与PMS进行通信,并将安装请求传递给PMS进行处理。 3. PackageParser:PackageParser是一个APK解析器,用于解析APK文件并提取其的信息,如应用程序的包名、版本号、权限等。PMS使用PackageParser来解析APK文件并获取相关信息。 4. PackageInstallerActivity:PackageInstallerActivity是一个系统界面组件,用于显示应用程序安装的界面。当用户通过界面触发应用程序安装时,PackageInstallerActivity会调用PackageInstaller来处理安装请求。 总结起来,应用程序的安装是由PackageManagerService负责实现的,它通过与PackageInstaller和PackageParser等组件的协作,完成解析APK文件、记录应用程序信息和处理安装请求等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值