单例模式
-1. 饿汉:
public class SingletonDemo3 { private static SingletonDemo3 instance = new SingletonDemo3(); private SingletonDemo3(){} public static SingletonDemo3 getInstance(){ return instance; } }
2. 懒汉:
一:
public class SingletonDemo1 { private static SingletonDemo1 instance; private SingletonDemo1(){} public static SingletonDemo1 getInstance(){ if (instance == null) { instance = new SingletonDemo1(); } return instance; } }
二:
public class SingletonDemo2 { private static SingletonDemo2 instance; private SingletonDemo2(){} public static synchronized SingletonDemo2 getInstance(){ if (instance == null) { instance = new SingletonDemo2(); } return instance; } }
3. 饿汉变种
public class SingletonDemo4 { private static SingletonDemo4 instance = null; static{ instance = new SingletonDemo4(); } private SingletonDemo4(){} public static SingletonDemo4 getInstance(){ return instance; } }
4.内部类
public class SingletonDemo5 { private static class SingletonHolder{ private static final SingletonDemo5 instance = new SingletonDemo5(); } private SingletonDemo5(){} public static final SingletonDemo5 getInsatance(){ return SingletonHolder.instance; } }
5. 枚举
public enum SingletonDemo6 { instance; public void whateverMethod(){ } }
6. double check
public class SingletonDemo7 { private volatile static SingletonDemo7 singletonDemo7; private SingletonDemo7(){} public static SingletonDemo7 getSingletonDemo7(){ if (singletonDemo7 == null) { synchronized (SingletonDemo7.class) { if (singletonDemo7 == null) { singletonDemo7 = new SingletonDemo7(); } } } return singletonDemo7; } }