单例设计模式的目的是为了保证只创建了一个实例,分为懒汉式和饿汉式。
如何保证只创建一个实例:
第一步:构造方法私有化;
第二步:自己本身提供一个对象(懒汉式在调用getInstance方法时才会new对象,所以比较懒,饿汉式在类加载时就创建对象了,所以是饿的);
第三步:提供静态方法getInstance()让外部可以通过类名.getInstance()直接获取对象(因为构造方法私有,外界创建不了该类的对象,只有将该方法定义为静态的)
//懒汉式:
class ESingleton {
private ESingleton(){}//第一步
static ESingleton s1 = null;//第二步(和饿汉式的区别在这)
static ESingleton getInstance(){//第三步
if (s1 == null) {
s1 = new ESingleton();
}
return s1;
}
void getInfo(){
System.out.println("s1");
}
}
//饿汉式:
class SSingleton {
private SSingleton(){}//第一步
static SSingleton s2 = new SSingleton();//第二步
static SSingleton getInstance(){//第三步
return s2;
}
void getInfo(){
System.out.println("s2");
}
}
//测试类:
public class SingletonTest {
public static void main(String[] args) {
ESingleton.getInstance().getInfo();
SSingleton.getInstance().getInfo();
}
}