設計模式GOF23之單例模式實現

2021-12-29 16:27:26 字數 1903 閱讀 3871

package com.bjsxt.cn.singleton;

/** * 餓漢式建立單例模型

* 餓漢式單例模型的特點:

* 1, 私有的該類物件靜態屬性

* 2, 私有的構造器

* 3, 公共的靜態方法訪問靜態屬性(因此需要時靜態的環境)

* @author wanna

* */

public class singletondemo1

//該訪問方法沒有同步synchronized,因此呼叫效率高

public static singletondemo1 getinstance()

}package com.bjsxt.cn.singleton;

/** * 2023年3月26日22:14:30

* 懶漢式單例模式

* 該懶漢式的特點是:

* 1, 構造器私有

* 2, 私有靜態屬性,型別為該類的物件,但是在宣告時並沒有初始化。因為lazy load。因為懶惰

* 3, 靜態訪問私有的那個靜態屬性的靜態方法。但是在該方法體中先要檢查該靜態屬性是否為空,為空則new,否則直接返回

* * @author wanna

* */

public class singletondemo2

private static singletondemo2 instance;

//因為該方法加了同步synchronized,效率低,但是具有延時載入的能力。提高了資源的利用率

public static synchronized singletondemo2 getinstance()

return instance;

}}package com.bjsxt.cn.singleton;

/** * 2023年3月26日22:14:38

* * 測試雙重檢測鎖式單例模式

* 雙重檢測鎖式單例模式的特點與懶漢式相似,但最重要的區別是在訪問靜態屬性的例項時的過程

* * 但是由於編譯器底層優化和jvm內部模型,偶爾會出問題,不建議使用

* @author wanna

* */

public class singletondemo3

//該方法把懶漢式單例模式中的synchronized同步下移到if中,提高了執行效率,不用每次獲取物件時都需要進行同步。

//只有第一次建立需要同步,之後就不需要了。

public static singletondemo3 getinstance()

}instance = sc;}}

} return instance;

}}package com.bjsxt.cn.singleton;

/** * 2023年3月26日22:14:45

* 靜態內部類實現單例模式

* 這種方式執行緒安全,執行效率高,並且可以延時載入

* 特點:

* 1, 構造器私有

* 2, 靜態屬性修改為靜態內部類,在內部類中定義了外部類的靜態final屬性(好像刪去final也不影響)

* 3, 靜態訪問靜態屬性的方法,在方法體重返回在內部類new出來的外部封裝類物件。也就實現了延時載入

* @author wanna

* */

public class singletondemo4

public static singletondemo4 getinstance()

private singletondemo4()

}package com.bjsxt.cn.singleton;/**

* 測試列舉實現單例模式(沒有延時載入)

* @author wanna

* */

public enum singletondemo5

}

設計模式GOF23之單例模式

單例模式的五種方式 主要 懶漢式,餓漢式 其他 雙重檢測鎖 double checking模式 靜態內部類,列舉模式 選取時機 延時載入,占用內部資源大 靜態內部類好於懶漢 不延時載入,占用內部資源小 列舉好於餓漢 單例模式 懶漢式 author 小帆敲 public class demo01 上鎖...

設計模式GOF23之單例模式

單例模式的五種方式 主要 懶漢式,餓漢式 其他 雙重檢測鎖 double checking模式 靜態內部類,列舉模式 選取時機 延時載入,占用內部資源大 靜態內部類好於懶漢 不延時載入,占用內部資源小 列舉好於餓漢 單例模式 懶漢式 author 小帆敲 public class demo01 上鎖...

GOF23設計模式(單例模式)

保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。單例模式的優點 1.由於單例模式只生成乙個例項,減少了系統效能開銷,當乙個物件的產生需要比較多的資源時,如讀取配置 產生其他依賴物件時,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留記憶體的方式來解決 2.單例模式可以在系統設定...