饿汉式单例:直接将对象定义出来
懒汉式单例:只给出变量,并不将其初始化;
饿汉式,static修饰,随着类的加载而加载,会损耗性能,但是方法相对简单
懒汉式 第一次用的时候相对较慢,因为需要加载!线程,不安全!
一
//饿汉式,直接把对象构造出来
class SingleDemo{
private static SingleDemo s1 = new SingleDemo();
private SingleDemo(){
//提供私有化的构造方法,那么外界就不能构造对象了!
二
//懒汉式,先定义,但是不创建对象
class SingleDemo2{
private static SingleDemo2 s3 ;
private SingleDemo2(){
//提供私有化的构造方法,那么外界就不能构造对象了!
}
public static SingleDemo2 getS3() {//这是一个方法,返回值为创建的对象!
if(s3 == null){
s3 = new SingleDemo2();
}//和饿汉式的区别,此时才来创建对象!
return s3;
}
}
}
public static SingleDemo getS1() {
return s1;
}
}
三 综合的内部类方法
public class StaticInnerSingleton {
private StaticInnerSingleton() {
if (SingletonHolder.instance != null) {
throw new IllegalStateException();
}
}
private static class SingletonHolder {
private static StaticInnerSingleton instance = new StaticInnerSingleton();
}
public static StaticInnerSingleton getInstance() {
return SingletonHolder.instance;
}
}