單例設計模式

2021-07-06 05:28:33 字數 1830 閱讀 5280

單例設計模式:

所謂單例模式,就是在程式中任何位置呼叫new方法建立單例的類,永遠只會有乙個物件被例項化產生,具體不周如下:

(1)將該單例模式的類的構造方法私有化(採用private修飾)。

(2)在其內部產生該類的例項化物件,並將其封裝成private static型別。

(3)定義乙個靜態方法,返回該類例項。

示例**如下:

class singleton    

private singleton()

public void print()

}

public class singletondemo

}

由上面的**,可以大致看出單例設計模式的基本模型了。

單例模式主要由兩種形式,俗稱:餓漢式及飽漢式。

(1)餓漢式:

/** 

* 單例模式的實現:餓漢式,執行緒安全 但效率比較低

*/

public class singletontest

private static final singletontest instance = new singletontest();

public static singletontest getinstancei()

}

(2)飽漢式:

/**  

* 單例模式的實現:飽漢式,非執行緒安全

*/

public class singletontest

private static singletontest instance;

public static singletontest getinstance()

}

很明顯,飽漢式使用時,是非執行緒不安全的,因為當多個執行緒中同時呼叫獲取單例例項時,可能導致new singletontest()會被多次呼叫,這樣就不是所謂的單例了。

因此在飽漢式的基礎上,還需完善一下,才能實現完美的單例模式。

執行緒安全,主要採取的方法就是避免多個執行緒同時訪問「關鍵」**,給關鍵**加個同步鎖。同步又有兩種方式,方式一:將該方法加個「同步(synchronized)」關鍵字,使其成為同步方法,但是這樣做的效率相比方式二,效率是比較低的,原因就是整個方法都成了「同步」的,而不是關鍵**「同步」。方式二:關鍵**處加同步關鍵字。

方式一:

/**  

* 執行緒安全,但是效率非常低

*/

public class singletontest

private static singletontest instance;

public static synchronized singletontest getinstance()

}

方式二:

/**  

* 執行緒安全 並且效率高

*/

public class singletontest

public static singletontest getistance()

}

}

return instance;

}

}

所以通常都是採用「雙重判空+同步鎖」的方式,這樣保證了「同步」的高效執行

此部落格最先發表於:xuqingsong.farbox.com

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...