1. 程式人生 > >單例模式--創建型設計模式

單例模式--創建型設計模式

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;
    }
}
技術分享圖片

單例模式--創建型設計模式