mingyunyuziyou

单例模式与static的区别

作者: 秒速五厘米     
 


1.static的对象一样可以被重定向啊,而单例除了static的引用外啊,最主要的是单例的构造器是private的啊,这样其他人都不可以new它了,不可以new这才是单例的核心思想所在吧。就是任何时候都只有一个,static虽然你可以随时使用,但是还是有被人new的可能。

private 构造器让人不可以new,通过get获取static对象的引用,这样可以保证任何时候都只有一个该对象的实例。

而static只是一个静态的对象,使用方便而已,并没有对那个对象任何的限制。和单例模式差了很多 .

举个例子,你是个程序员,你希望任何时候有一个class A的实例就可以了,所以你在你的class B里封装了一个A的对象


class B
{
	static A a = new A();
}


这样以后所有代码大家都可以使用B.a来调用A里的方法。很方便,可是没几个月你走了,换我接手

我想使用A里的方法,可是也许我根本就没有你的API,我不知道B里已经有了一个static的A,因此我在我的class C里


class C
{
public void getA
{
A a =new A();
       //这个时候整个工程下出现了2个A的对象已经违背了你当初的设计,
           以后可能还会有更多的人new A();
       //但是如果你当时把A设计成的单例,就不会出现这样尴尬的局面了
}
}


2.使用单例模式可以限制对象实例的个数,除了返回实例的操作之外不能被new出来。这在某些需要限制对象访问的场合下是有用的。

使用static的话并不能限制对象实例的个数。


3.单例模式最大的好处就是节省内存空间,提高效率,因为他永远都只有一个实例!而static有还是有可能被new出多个实例的,而这多个实例在用完之后也许就没用了,还要等待垃圾回收机制来回收,所以效率自然不如单例。