一个对象只想要存在一个实例。
实现方法:
方法一:
public class Singleton{
private static Singleton instance; // 1
private Single(){} //2
public synchronized static Singleton getInstance(){ // 3
if( instance == null ){
instance = new Singleton();
}
return instance;
}
}
1处,静态成员变量,用static是因为3处用了static.
2处,私有构造器,如果不写,默认的是公共的无参购造器,那么要调用的外部类就可以 new这个类的实例了,就无法单例了。
3处,使用static是因为这类不能new实例,所以只能提供静态方法供外部调用。使用synchronized是为了防止多线程访问,出现资源共享,多个线程同时调getInstance(),因为是同时,所以instance是空时,多少个线程就new出了多少个实例。
方法二:
public class Singleton{
private static singleton instance = new Singleton(); //1
private Singleton(){}
public static Singleton getInstance(){ //2
return instance;
}
}
1处,对类变量(静态成员变量)进行了初始化,这个实例在内存中只有一份。
2处,不需要加同步,因为实例只有一个。多线程也是共享内存中的一个。
私有构造器是必须的。
所以我觉得不要下面的getInstance方法,给上面的成员变量写成public其实效果也是单例。直接Singleton.instance.
呵呵,不过这样就不符合编程规范了,成员变量,变成公共变量了,正常不会有人定义一个public 的内部变量。
以上是个人看法。