高频面试题--单例及应用场景
很多同学去面试的时候,经常会被问到对单例的理解。当然,单例比较简单,同学们也基本能弄清楚单例的概念。但一些深层次的内容,有些同学可能理解的还不太够,例如单例的优势、使用场景等。今天,就给大家全面阐述一下单例模式。
一. 生活案例
相信很多小伙伴都知道,国家早几年施行的计划生育政策, 规定一对夫妇只生一胎。刚结婚时只能生一胎,生完后就不能再生,否则就会违背国家政策。
二. 程序概念
而我们所谓单例设计模式,简单地说就是无论程序如何运行,采用单例设计模式的类(Singleton类)永远只会有一个实例化对象产生。相当于一个类只能有一个“孩子”,所以单例模式就属于符合计划生育的政策要求。那单例是怎么保证一个类只能生一个“孩子”呢?具体实现步骤如下:
(1). 构造方法私有化(采用private修饰);
(2). 使用静态方法调用得到单例模式对象。
示例代码
单例作用
从上面的案例可以看出,不管是单例的饿汉式还是懒汉式,最终会保证一个类只能得到同一个对象,所以使用单例的好处显而易见,就是确保只能产生一个类对象,所以就可以节省内存资源。
应用场景
在学习前面的课程时,可能有很多同学不理解,单例在实际开发中到底有哪些用处?其实不管是在Web开发,还是SSM框架中,单例设计模式都随处可见。给你举个简单例子,例如:多个用户访问淘宝网站,如果不是单例设计,那么每个人的访问,都会创建一个独立的对象,这就大大地浪费了内存资源。
懒汉式 VS 饿汉式
同学们也看到了,上面代码中的单例模式分为懒汉式和饿汉式两种情况。我经常听到有的同学对两种情况的区别,理解为懒汉式是线程不安全,而饿汉式是线程安全的,但并不理解两者的具体优缺点在哪,接下来就再说一下两者的具体区别。
4.1 饿汉式
饿汉式无需关注多线程问题,写法简单明了,可以直接在类中实例化静态对象。但它是在加载类时就要创建实例,所以如果类中有很多个单例对象,可能我暂时是用不到的,但也进行了创建,反而会浪费资源。
4.2 懒汉式
懒汉式的优势在于可以延时加载,也就是说可能有些单例对象没有使用时,我就不需要创建此对象,只有在调用时才创建出对象,但该方式在多线程时并不安全。
4.3 小节
综上所述,当类中有很多个单例对象,但并不是都必须立即使用,那么就选择懒汉式比较好;如果类中的单例对象基本都会被立即使用到,且考虑多线程的情况,应该选择饿汉式的设计。
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14