正常的一个类定义如下:
class SingleTon{
}
在构造对象实例的时候我们使用new SingleTon(),那么这样就可以构建多个对象实例,为了不让用户可以任意的构建对象,这里我们把类的默认构造函数重写一下并声明为private,问题又来了,这样做的话会导致一个对象也new不了。为了解决这个问题,可以在类的内部new一个类对象,这就产生了单例设计模式的两种方法,“饿汉式”和“懒汉式”。
“饿汉式”SingleTon类定义如下:
class SingleTon1{
private SingleTon1(){
}
public static SingleTon instance = new SingleTon1();
}
"懒汉式":
class SingleTon2{
private SingleTon2(){
}
private static SingleTon2 instance;
public static SingleTon2 getInstance() {
if (instance == null) {
instance = new SingleTon2();
}
return instance;
}
}
饿汉式和懒汉式的区别在于什么时候实例化instance对象,饿汉式在类加载的时候就实例化了instance对象,而懒汉式只有在第一次调用getInstance函数是才实例化instance对象,所以饿汉式在类加载的时候比较慢而在外面使用instance的时候比较快,相反,懒汉式则在类加载的时候比较快而在第一次使用getInstance的时候比较慢。