設計模式 單例模式 1

2021-07-10 04:42:44 字數 1800 閱讀 5332

上三篇文章都是在講工廠模式,這篇就跟吉哥一起學習最常用的模式——單例模式。

概念:在它的核心結構中只包含乙個被稱為單例的特殊類。

分類:單例模式的形式也比較多,包涵以下8種(這裡是把懶漢和餓漢細分了):

1、餓漢式(靜態常量)

2、餓漢式(靜態**塊)

3、懶漢式(不加鎖,執行緒不安全)

4、懶漢式(同步方法,執行緒安全)

5、懶漢式(

同步**塊,執行緒安全)

6、靜態內部類

7、雙重校驗鎖

8、列舉

是不是感覺和想象不一樣,平時感覺就兩三種,卻分出了那麼多種,我們接下來慢慢解析下每種。

(1)餓漢式(靜態常量)

在類裡宣告乙個類物件,靜態的,並做初始化,類載入時候就完成了例項化;

構造方法要私有化。

比喻:就像是乙個飢餓的人,迫不及待的就吃麵包了。

/***(1)餓漢式(靜態常量)

*/public class hungrysingletona 

public static hungrysingletona getinstance()

}(2)餓漢式(靜態**塊)

在類裡宣告乙個類物件,靜態的,不做初始化,在靜態**塊裡面初始化,類載入時候就完成了例項化;

構造方法要私有化,和上面那個沒太大區別,只是在靜態**中初始化。

比喻:也是乙個飢餓的人,迫不及待的吃麵包,只是吃麵包的時候蘸了點番茄醬。

/***餓漢式(靜態**塊)

*/public class hungrysingletonb 

private hungrysingletonb() {}

public static  hungrysingletonb getinstance() 

}(3)懶漢式(

不加鎖,執行緒不安全)

在類裡面宣告乙個類物件,靜態的,不做初始化;在獲取方法裡面判斷為空的情況下建立物件,構造方法要私有化。

/*** 懶漢式(不加鎖)

*/public class dawdlersingletona 

public static dawdlersingletona getinstance() 

return 

singleton;}}

缺點:多執行緒不同步,可能會出現建立多次的問題。

(4)懶漢式(同步方法)

和上面不加鎖懶漢不一樣的地方是在呼叫方法處加了同步鎖,可以在多執行緒情況下保證了只建立乙個物件。

/*** 懶漢式(同步方法)

*/public class dawdlersingletonb 

public static synchronized dawdlersingletonb getinstance() 

return 

singleton;}}

缺點:每次建立物件,都要去同步這個方法,造成同步時間的花銷。

(5)懶漢式(同步**塊)

和上面同步方法的懶漢式區別的是同步方法鎖換成同步**塊鎖,獲取物件速度會比上面快一點,因為當建立過一次的情況下,判斷有的情況不用再去同步建立物件。

/*** 懶漢式(同步**塊)

*/public class dawdlersingletonc 

public static dawdlersingletonc getinstance() 

}return 

singleton;}}

缺點:這個未達到完全的執行緒同步,因為當多個執行緒同時過了if

判斷,但沒有執行同步鎖的時候,就可能陸續建立多次物件。

還沒講完,但已經是一點半了,睡覺去,下篇接著講單例。

設計模式1 單例模式

文章引用出處 singleton模式是最簡單最常用的設計模式。1,定義 確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個該類。2,單例模式優點 1 單例模式在記憶體中只有乙個例項,減少了記憶體的開支。2 單例模式只生成乙個例項模式,減少了系統效能的開銷。如當乙個物件的產生需要比較多的系統資...

設計模式1 單例模式

單例模式,利用工廠類只生產乙個例項或者有限個例項,比如乙個系統中只有乙個主機板,乙個顯示卡,但是有些系統中也可以存在多個,雙顯示卡,雙顯示器等等。這些在singleton module中都是可以定義的。當然我們也可以使用全域性的變數或者靜態類或者物件去做,但是單例模式的存在是有其優點的。public...

設計模式1 單例模式

保證乙個類只有乙個例項 即乙個物件,並且提供乙個訪問該例項的全域性訪問點 即類中有乙個公共的方法 方法的返回該類的物件。1.windows的任務管理器 無論開啟多少次都只能開啟乙個視窗 2.windows的 站 3.專案中的配置檔案 4.的計數器 5.日誌 6.連線池 8.spring的bean 預...