日期:2014-05-20  浏览次数:20708 次

这两组代码有啥区别
CodeA:
Java code

public class MyManager{

  private static class MyManagerContainer{
     private static MyManager instance = new MyManager();
  }

  public static MyManager getInstance(){
     return MyManagerContainer.instance;
  }

  private MyManager(){

  }

}



CodeB:
Java code

public class MyManager{
  private static MyManager instance;

  public static getInstance(){
     return instance;
  }

  public MyManager(){
      if(instanct!=null){
         throw new IllegalStateException("Already exist");
      }
      instance = this;
  }
}



同样是单例,有啥区别,各有啥好处?

------解决方案--------------------
对于程序员来讲就是 一个将MyManaager构造方法暴露出来,另一个被hide了,但是对于用户来讲codeA可能可读性比较好。内部实现机制我觉得一样。单例么,思路都是一样的
------解决方案--------------------
CodeA是线程安全的单例模式
CodeB不是线程安全的,在多线程可能会产生多个实例
------解决方案--------------------
第一个就是引入类的时候对象就存在,没有给程序员控制对象何时产生的权利。
第二个可以在程序员真正需要改对象时才创建出来。

各有各的优点。
------解决方案--------------------
两种单例模式,分别是饿汉式和懒汉式
------解决方案--------------------
建议使用饿汉式的 虽然浪费了效率 但是不会出异常 懒汉式效率好 但是需要加锁 不然会出异常的
探讨
两种单例模式,分别是饿汉式和懒汉式