Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南

// 在成员变量声明的时候就要初始化
private static SingletonDemo3 instance = new SingletonDemo3();

private SingletonDemo3() {

}

public static SingletonDemo3 getInstance() {
// 若当前实例为空,重新指向一个新的实例
if (instance == null) {
instance = new SingletonDemo3();

}
return instance;
}
}

优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。

3.登记式模式(holder)

内部类只有在外部类被调用才加载,产生Singleton实例;又不用加锁。此模式有上述两个模式的优点,屏蔽了它们的缺点,是最好的单例模式。

/**

  • 这个是懒汉模式变种,使用静态内部类创建
    */
    public class SingletonDemo4 {

private static class SingletonHolder{
private static final SingletonDemo4 instance = new SingletonDemo4();
}

private SingletonDemo4() {

}

public static SingletonDemo4 getInstance() {
// 调用内部类的属性创建新的实例
return SingletonHolder.instance;
}
}

静态内部类这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,它跟前几种方式不同的是:Singleton类被装载了,instance不一定被初始化。因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。想象一下,如果实例化instance很消耗资源,我想让他延迟加载,另外一方面,我不希望在Singleton类加载时就实例化,因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,那么这个时候实例化instance显然是不合适的。这个时候,这种方式相比饿汉方法就显得更合理。

若单例对象占用资源少,不需要延迟加载,那么使用枚举好于饿汉式,因为枚举十分安全,耗时差不多。

若单例对象占用资源多,需要延迟加载,那么使用内部类好于懒汉式,耗时差距明显。

对文章有何见解,或者有何技术问题,都可以在评论区一起留言讨论,一定会回复的。
也欢迎大家来我的B站找我玩,各类Android架构师进阶技术难点的视频讲解,任君白嫖。
B站直通车:https://space.bilibili.com/484587989

尾声

开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。

  • 330页 PDF Android核心笔记

Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南_第1张图片

  • 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题

Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南_第2张图片

Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南_第3张图片

  • PDF和思维脑图,包含知识脉络 + 诸多细节

Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南_第4张图片

  • Android进阶系统学习视频

Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南_第5张图片

27946575)]

  • Android进阶系统学习视频

[外链图片转存中…(img-GYlZoji0-1643527946575)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

你可能感兴趣的:(程序员,架构,移动开发,android)