CodeA:public class MyManager{  private static class MyManagerContainer{
     private static MyManager instance = new MyManager();
  }  public static MyManager getInstance(){
     return MyManagerContainer.instance;
  }  private MyManager(){  }}
CodeB:public class MyManager{
  private static MyManager instance;  public static getInstance(){
     return instance;
  }  public MyManager(){
      if(instanct!=null){
         throw new IllegalStateException("Already exist");
      }
      instance = this;
  }
}
同样是单例,有啥区别,各有啥好处?

解决方案 »

  1.   

    对于程序员来讲就是 一个将MyManaager构造方法暴露出来,另一个被hide了,但是对于用户来讲codeA可能可读性比较好。内部实现机制我觉得一样。单例么,思路都是一样的
      

  2.   

    第一个是不是和单例设计差不多的啊?
    第二个是这个类只能产生一个对象吧.再有就会直接抛出错误。
    弱弱的问一下 A的那个内部类为什么要用static修饰啊?
      

  3.   

    CodeA是线程安全的单例模式
    CodeB不是线程安全的,在多线程可能会产生多个实例
      

  4.   

    哪里有问题了?第二个就是要强制你手动new对象出来,以后再用的时候就不需要再new,用get方法获得该类对象。
      

  5.   

    在我看来,都是单例实现.
    唯一不同是CodeB可以自己手动初始化
    CodeA是JVM直接帮你实例化
      

  6.   

    这个是正解,另itmyhome说的也没错,但实际上wubill说到点子上了。
      

  7.   

    A 是单例 的标准结构B 不是单例 在JAVA与模式书中提到过B的方法。是高手在特地场合特意公有构造。 水平有限知道那种特定场合时指什么,暂且看成是多例吧