前言
三种方式来创建单例模式
一、定义一个属性new自己,且将构造方法设为private
public class Asingleton01 {
public static final Asingleton01 INSTANCE = new Asingleton01();
private Asingleton01() {
}
public void method() {
System.out.println("方法");
}
public static void main(String[] args) {
Asingleton01.INSTANCE.method();
}
}
最简单的做法,特点是在类加载的时候就会初始化,也就是饿汉式
二、使用静态内部类
public class Asingleton02 {
private Asingleton02() {
}
// 静态内部类
private static class Inner{
public static final Asingleton02 INSTANCE = new Asingleton02();
}
public static Asingleton02 getInstance(){
return Inner.INSTANCE;
}
public void method() {
System.out.println("方法");
}
public static void main(String[] args) {
Asingleton02.getInstance().method();
}
}
因为静态内部类不会在Asingleton02加载时初始化,达成了用时加载的效果,也就是懒汉式
三、使用enum
public enum Asingleton03 {
INSTANCE;
public void method() {
System.out.println("方法");
}
public static void main(String[] args) {
Asingleton03.INSTANCE.method();
}
}
这个是新学习到的,很简洁,也没有上面的烦恼
总结
上面的三种方法都是线程安全的