单例模式
以无延迟加载考虑时,枚举式单例好于饿汉式单例
饿汉式单例模式
1 /** 2 * 饿汉式单例模式.无延迟加载,线程安全,(方法不同步)调用效率高 3 * @author 小雨 4 * 5 */ 6 public class SingleTest03 { 7 //类加载时,是线程安全的 8 private static final SingleTest03 s = new SingleTest03(); 9 private SingleTest03(){} 10 public static SingleTest03 getInstance(){ 11 return s; 12 } 13 }
枚举式单例模式
1 /** 2 * 枚举类式单例模式.无延迟加载,线程安全,调用效率高 3 * @author 小雨 4 * 5 */ 6 //枚举本身就是单例 7 public enum SingleTest04 { 8 INSTANCE; 9 //也可以根据需要写方法 10 public void ss(){} 11 12 }
以有延迟加载考虑时,静态内部单例好于懒汉式单例
懒汉式单例模式
1 /** 2 * 懒汉式单例模式.延迟加载,线程安全,(方法同步)调用效率不高 3 * @author 小雨 4 * 5 */ 6 public class SingleTest01 { 7 private static SingleTest01 s; 8 private SingleTest01(){} 9 public static synchronized SingleTest01 getInstance(){ 10 if(s==null){ 11 s = new SingleTest01(); 12 } 13 return s; 14 } 15 }
静态内部类单例模式
1 /** 2 * 静态内部类式单例模式.延迟加载,线程安全,(方法不同步)调用效率高 3 * @author 小雨 4 * 5 */ 6 public class SingleTest02 { 7 8 private SingleTest02(){} 9 10 //用到时才会加载内部类,并且是线程安全的 11 private static class SingleClassInstance{ 12 private static final SingleTest02 instance = new SingleTest02(); 13 } 14 public static SingleTest02 getInstance(){ 15 return SingleClassInstance.instance; 16 } 17 }