一般初始化对象都是用new的,但是啥时候用.getInstance啊?

解决方案 »

  1.   

    有一些类定义为单例的时候 需要通过getInstance()来获得 ,如果不是也可以通过getInstance()获得
      

  2.   

    getInstance更广义的用法是静态工厂函数,即一个类的静态方法返回该类的一个实例,当然可以用它来实现单例模式,但它还可以有更广的用法,比如返回它的一个子类对象.用new来创建对象是调用对象的构造函数,而静态工厂函数则是静态方法,两者相比各有优缺点,静态工厂函数的优点:
    1.静态工厂函数有名称,而构造函数只能和类同名,这样如果有许多构造函数就会表达不清,这时有静态工厂函数更好
    2.不必在每次调用它们的时候都创建一个新的对象,这样就可以实现单例模式甚至多例模式.
    3.静态工厂函数可以返回原类型的子类型对象,更灵活缺点在于:
    1.类如果不含有public或者protected的构造函数,就不能被子类化
    2.它跟其他静态方法没什么区别,对客户端使用来说可能不是太明确,得做好文档化工作
      

  3.   

    反射常在工厂中用到。
    不用纠结这个,用到的时候自然就知道了,能new的地方就new吧。 new 不了,就想想是不是该使用反射了。
      

  4.   

    在单例和工厂方法中会用到getInstance方法,目的是一个类只生成一个实例