Java模式设计之单例模式

单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种

单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
1,饿汉式单例类
public class Singleton {
    //私有的构造方法防止外部实例化

  private Singleton(){}

  //在自己内部定义自己一个实例

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

  private static Singleton instance = new Singleton();

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

2,懒汉式单例类

public class Singleton {

  private static Singleton instance = null;

      //确保线程安全

  public static synchronized Singleton getInstance() {


  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
  return instance;   }

}


第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。


注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。
一般来说第一种比较安全

你可能感兴趣的:(java,null,Class,initialization)