上三篇文章都是在講工廠模式,這篇就跟吉哥一起學習最常用的模式——單例模式。
概念:在它的核心結構中只包含乙個被稱為單例的特殊類。
分類:單例模式的形式也比較多,包涵以下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 預...