单例模式:确保一个类中只有一个实例;
饿汉式:立即加载时;
public class Demo {
//饿汉式
private Demo() {}
private static Demo instance = new Demo();
public static Demo getInstance() {
return instance;
}
}
懒汉式:延迟加载时;懒汉式一种常规的写法就是在获取对象的时候,需要加同步关键字(“synchronized”),这样效率上会降低,为了避免这个问题我们可以用优化后的懒汉式,也就是用内部类的形式来进行。
登记式:实际上就是将所有的子类对象同意存放在父类的对象中,由父类对象统一来向外提供;在以前有人说这个算单例模式的一种,也有人说不算,所以这个登记式现在也存在一定的歧义。
public class Demo {
//懒汉式
private Demo() {}
private static Demo instance;
public static Demo getInstance() {
if(instance==null) {
instance = new Demo();
}
return instance;
}
//优化后的懒汉式
private Demo() {}
private static class Test{
private static Demo instance = new Demo();
}
public static Demo getInstance() {
return Test.instance;
}
}
测试:
public class Test {
public static void main(String[] args) {
Demo d1 = Demo.getInstance();
Demo d2 = Demo.getInstance();
if(d1==d2) {
System.out.println("d1和d2是同一个实例");
}else {
System.out.println("d1和d2不是同一个实例");
}
}
}