单例模式(Singleton Pattern)

单例模式:

  和new类似,用来创建实例。

  单例对象的类保证了只有一个实例存在。

 

原理:

  1、该类的构造函数定义为私有方法,这样外面不能通过new实例化此类,只能在类里面实例化

  2、类返回一个获取实例的方法

 

构建方式:

  懒汉方式:全局的单例实例在第一次被使用是创建

  饿汉方式:全局的单例实例在类装载时构建

 

维基百科code例子:

饿汉方式创建:

  public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
  
    // Private constructor suppresses   
    private Singleton() {}
 
    // default public constructor
    public static Singleton getInstance() {
        return INSTANCE;
    }
  }

 

懒汉方式创建:

  public class Singleton {
    private static volatile Singleton INSTANCE = null;
  
    // Private constructor suppresses 
    // default public constructor
    private Singleton() {}
  
    //thread safe and performance  promote 
    public static  Singleton getInstance() {
        if(INSTANCE == null){
             synchronized(Singleton.class){
                 //when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.
                 if(INSTANCE == null){ 
                     INSTANCE = new Singleton();
                  }
              } 
        }
        return INSTANCE;
    }
  }

 

posted @ 2019-01-02 13:07  第五  阅读(137)  评论(0编辑  收藏  举报