设计模式一分钟之Singleton

2018-04-04  本文已影响0人  小强聊架构


使用场景:

单例模式,保证在java中,一个类class只有一个实例存在。

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

为什么要使用:

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

使用方法:

有三种形式:

1. Common initialzation

public class Singleton {

  private Singleton(){}

  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问

  public static Singleton getInstance() {

    return instance;

   }

}

2.lazy initialization

public class Singleton {

  private static Singleton instance = null;

      //此处,synchronized 很重要。

  public static synchronized Singleton getInstance() {

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

  if (instance==null)

    instance=new Singleton();

  return instance;

    }

}

3. 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;

     }

}


作者微信公众号 "小强聊架构"。

上一篇 下一篇

猜你喜欢

热点阅读