單例模式--創建型設計模式
阿新 • • 發佈:2018-04-22
AD 讀取 res 系列化 設計模式 public gif LV 序列化
1.餓漢式
優點:線程安全
缺點:立即加載
2.懶漢式
優點:懶加載
缺點:線程不安全(可以用雙重鎖機制來保證線程安全,但是調用效率低)
3.內部類型單例模式,前兩種基本不用,因為這種包含前兩種的優點
優點:1、線程安全,2、懶加載
代碼如下:
package sington; public class InnerSing { private InnerSing(){ } public static InnerSing getIntance(){ return InnerClass.instance; } private static class InnerClass { private static InnerSing instance = new InnerSing(); } }
4、枚舉類
優點:前三種都沒法避免使用反射/序列化(即寫入硬盤再讀取硬盤創建對象)來創建對象,
而枚舉類可以;(其實可以通過構造器代碼寫:對象非空判斷+拋錯可以防止反射創建,而重寫readResolve()方法可以防止反系列化構造多一個對象)
缺點:不是懶加載
代碼如下:
package sington; public enum EnumSing { INTANCE; public void function(){ System.out.println("具體執行方法"); } public static EnumSing getIntance(){ return INTANCE; } }
單例模式--創建型設計模式