我有些不明白,就是单例模式是是怎么确保只生成一个对象实例的,就是单例是怎么生成的?

解决方案 »

  1.   

    单例模式一般常用有两种方法:
    饿汉模式:class Singleton {
      private static Singleton instance=new Singleton();
      private Singleton(){}
      static Singleton getInstance() {
          return instance;
      }
    }
    懒汉式:class Singleton {
      private static Singleton instance=null;
      private Singleton(){}
      static Singleton getInstance() {
          if(instance==null)
          instance=new Singleton();
          return instance;
      }
    把构造函数声明为private,禁止了外部的实例化(当然,通过反射机制可以实例化private的类,这里就不多说题外话了)当然,这模式在并发情况下,可能会出现多个线程同时执行,使得单例失效。
      

  2.   

    因为是static,所以可以确保只生成一个对象实例
      

  3.   

    枚举式:public enum SingleTon{
    ONE;
    }
      

  4.   

    另外有个关键点:构造方法为private的,这样只能在类定义的时候进行调用初始化,就可以确保了。
      

  5.   

    利用关键字static只加载一次的特点!!!
      

  6.   


    //内部类的方式,单例要注意线程安全
    public class Singleton{
    private Singleton(){}
    private static class SingletonHandler{
    public static Singleton instance = new Singleton();
    }
    public static Singleton getInstance(){
    return SingletonHandler.instance;
    }
    }