一、單例模式定義:
單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,以避免兩個列印作業同時輸出到印表機中。每台計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼叫。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。
二、實現方式:
懶漢模式
public class demo
// 2、單例例項
private static demo instance = null;
// 3、獲取例項介面
public static demo getinstance() }}
return instance;
}}
評價:延時載入,節約了記憶體。效率相對低一些。利用同步塊實現執行緒安全。
餓漢模式
public class singletion
private static singletion instance = new singletion(); // singletion類載入的時候,就初始化這個例項
public static singletion getinstance()
}
評價:程式啟動時載入,先載入類,再初始化靜態屬性,由於後面無法再對物件進行修改,從而實現執行緒安全,效率相對高一些。占用記憶體相對多一些。
iodh技術實現單例模式(靜態內部類)
public class singletion
private static class innersingletion
public static singletion getinstance()
}
評價:使用靜態內部類的方式,只有在使用該例項的時候,才去載入靜態內部類,從而實現延時載入。因為靜態內部類只初始化一次,靜態內部類的靜態屬性也只初始化一次,後面無法修改物件的狀態,從而實現執行緒安全。綜合了上述兩種方法的優點。
三、單例模式的優缺點:
(1)單例模式沒有抽象層,因此單例模式的擴充套件比較困難的。
(2)單例類的職責過重,一定程度上違背了「單一職責原則」。
(3)長時間不使用的單例類可能被系統**,導致單例物件狀態的丟失。
常用設計模式 單例模式
1.單例模式的特點 1.單例類在系統中僅有乙個例項 2.單例類必須自己建立自己的例項 3.單例類必須向系統中的其他物件提供這個例項 2.單例模式的兩種模式 public class test 2.1 餓漢模式 public class singleton 建立類的唯一例項 private stati...
常用設計模式 單例模式
應用執行過程當中,只有乙個物件的模式,叫做單例模式 1.構造器私有 2.提供可以獲得物件的靜態方法 3.將物件設定為靜態 懶漢模式 用的時候再建立 餓漢模式 載入的時候就建立 public class singleton 構造器私有,無法在外部例項化這個物件 外部一千一萬個物件也都只能是對perso...
常用設計模式 單例設計模式
它的運作方式是這樣的 如果你建立了乙個物件,同時過一會兒後你決定再建立乙個新物件,此時你會獲得之前已建立的物件,而不是乙個新物件。注意,普通建構函式無法實現上述行為,因為建構函式的設計決定了它必須總是返回乙個新物件。和全域性變數一樣,單例模式也允許在程式的任何地方訪問特定物件。但是它可以保護該例項不...