Singleton 单例模式 问题汇总

单例设计模式是您在Java应用程序中最常见的模式之一,并且在核心Java库中也大量使用。Singleton模式中的问题在Java面试中非常常见,并且对如何实现单例模式有一定的了解会有所帮助。本文中,列出有关Singleton模式的一些最常见问题。

以下是我收集的Singleton设计模式问题汇总。如果你知道如何创建线程安全的单例以及实现此模式的不同方法,将重点介绍此模式的关键以及缺点。

1 什么是单例模式?你以前使用过Singleton吗?

Singleton是一个类,在整个应用程序中有一个实例,并提供一个getInstance()方法来访问该Singleton实例。JDK中有许多类是使用Singleton模式实现的,例如java.lang.Runtime,该类提供getRuntime()方法获取对他的访问,并应用获取Java中的可用内存和总内存。

 

2 Singleton的候选类是什么?你使用Java的Singleton的哪种类?

任何你希望对整个应用程序可用并且整个实例之一,一个实例是可行的类,可成为Singleton。例如:Runtime类,因为在整个Java应用程序上只有一个运行环境可用使Runtime Single是正确的,另一个是实用程序类,譬如GUI中的Popup,如果要显示带有消息的弹出窗口,则可以在整个GUI应用程序上拥有一个PopUp类,并随时获取其实例,然后使用message调用show()即可。

 

3 可以为Java中的Singleton类的getInstance()方法编写代码吗?

使用静态工厂并进行双重检查锁定

 

4 使整个getInstance()方法同步还是仅临界部分就可以了?你会选择哪一个?

这是一个非常好的问题,这与双重检查锁定模式有关,同步很好,而且在整个方法上应用此同步时,对getInstance()的调用将被同步并满足。由于仅在单例实例的初始化期间才需要同步,因此要防止创建另一个Singleton实例,最好只同步关键部分而不是整个方法。单例模式也与工厂设计模式密切相关,在工程设计模式中,getInstance()用作静态工厂方法。

 

5 什么是Singleton的延迟和加载,你将如何实现?

有很多实现Singleton的方法,例如使用双重检查锁定或在类加载期间初始化静态实例的Singleton类。前者称为延迟加载,因为仅当客户端调用getInstance()方法时才创建Singleton实例,而后一种则称为早期加载,因为将类加载至内存时才创建Singleton实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值