建立型模式 單例模式

2021-09-24 05:20:40 字數 1497 閱讀 3629

單例模式的優點

由於單例模式只生成乙個例項,減少了系統效能開銷,當乙個物件的生產需要比較多的資源時,如讀取配置、產生其他依賴物件時,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留在記憶體的方式來解決。

單例模式可以在系統設定全域性的訪問點,優化環共享資源訪問,例如可以設計乙個單例類,負責所有資料表的對映處理。

常見的五種單例模式實現方式

主要:1、餓漢式(執行緒安全,呼叫效率高,但是,不能延時載入。)

package gof.建立者模式;

public class singletondemo1

//方法沒有同步,呼叫效率高

public singletondemo1 getinstance()

}

2、懶漢式(執行緒安全,呼叫效率低。但是,可以延時載入。真正用的時候才載入)

問題:資源利用率高。但是,每次呼叫getinstance()方法都要同步,併發效率低。

package gof;

public class singletondemo2

//方法同步,呼叫效率低

public static synchronized singletondemo2 getinstance()

return s;

}}

其他:

1、雙重檢測鎖式(由於jvm底層內部模型原因,偶爾會出現問題。不建議使用)

這個模式將同步內容下方到if內部,提高了執行的效率,不必每次獲取物件時都進行同步,只有第一次才同步建立了以後就沒有必要了。

package gof.建立者模式;

public class singleton

public static singleton getsingleton() } }

return singleton;

}}

2、靜態內部類式(執行緒安全,呼叫效率高,但是可以延時載入)

package gof.建立者模式;

public class singletondemo4

private static class singletonclassinstance

public static singletondemo4 getinstance()

}

要點:

(1)、外部類沒有static屬性,則不會像餓漢式那樣立即載入物件。

(2)、只有真正呼叫getinstance(),才會載入靜態內部類。載入類時是執行緒安全的。instance是static final型別,保證了記憶體只有這樣乙個例項存在,而且只能被賦值一次,從而保證了執行緒安全性。

(3)、兼備了併發高效呼叫和延遲載入的優勢。

3、列舉單例(執行緒安全,呼叫效率高,不能延時載入)

package gof.建立者模式;

public enum singletondemo5

建立型模式 單例模式

餓漢式 package com.hfview.designmode.signle 1.餓漢式 就是在初始化成員變數的時候就獲取例項物件 2.public class signlemode private signlemode 懶漢式 package com.hfview.designmode.sig...

建立型模式 單例模式

概述 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。適用性 當類只能有乙個事例而且客戶可以從乙個眾所周知的訪問點訪問它時。當這個唯一事例應該是通過子類化可擴充套件的,並且客戶應該無需更改 就能使用乙個擴充套件的例項時。參與者 singleton 定義乙個instance操作,允許客戶訪問它...

建立型模式 單例模式

1.乙個類只能建立乙個物件 2.應用 主要應用與資料庫應用,可以避免大量的new操作消耗資源 3.uml類圖 user 何曉巨集 date 2018 9 27 time 15 48 namespace singleton class singleton 判斷 instance是否為空,為空則新建乙個...