为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式面试必看之单例模式

标签:
Java 面试 架构

假设在面试中,有面试官提问,写一段单例模式的示例代码吧。
其实不要觉得简单,用好单例模式没有那么简单。

作者就曾出过这样一道题,结果好多同学一听觉得很简单,但实际写出来的代码却千奇百怪。

下面介绍下单例模式的要点,不为面试,为了更好的写出漂亮的代码。

使用场景:

单例模式,保证在java中,一个类class只有一个实例存在。
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”

为什么要使用:

对于系统中某些class,只有一个实例很重要。比如Windows系统的任务管理器,打印机的任务调度程序,同时,可以节约内存使用。

使用方法:

有三种形式:

  • Common initialization
public class Singleton {

  private Singleton(){}

  //注意这是private 只供内部调用
  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   } 
}
  • lazy initialization
public class Singleton { 

  private static Singleton instance = null;
       //此处,synchronized 很重要。
  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率,但是没有第一种形式安全。
  if (instance==null)
    instance=new Singleton();
  return instance;   
     } 

}
  • double-check+synchronized
public class Singleton{
    private static volatile Singleton instance=null;
    private Singleton(){
        //do something
    }
    public static  Singleton getInstance(){
       //双重判断+同步块的方法,可以大大提高效率。
        if(instance==null){
            //将同步块放到方法的内部,提高了执行效率
            synchronized(Singleton.class){
                if(instance==null){
                    instance=new Singleton();
                }
            }
        }
        return instance;
     }
}

欢迎评论并讨论哈!

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消