單例類模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例。在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常常被設計成單例。選擇單例模式是為了避免不一致狀態。
有如下特點:
1. 單例模式只能有乙個實類。
2. 單例類必須自己建立自己的唯一例項。
3. 單例類必須給其他物件提供這一例項。
package com.cjm.mvnbook.test7;
/** * 懶漢式單類模式
*@author chenjieming
* */
public
class
lazysingletontest
public
void
setname(string name)
public
static lazysingletontest singleton = null;
//構造方法私有化,不能通過構造方法建立例項化物件
private
lazysingletontest()
public
static lazysingletontest getinstance()
return singleton;
}}
package com.cjm.mvnbook.test7;
public
class hungersingletontest
public
void
setname(string name)
public
static hungersingletontest singletontest = null;
private
hungersingletontest()
static
public
static hungersingletontest getinstance()
}
執行測試:
package com.cjm.mvnbook.test7;
public
class test7
public
static
void
lazytest()
public
static
void
unsafehunger()
}
執行結果:李四 李四
餓漢式和懶漢式區別:
從名稱上可以看出來,餓漢就是類一旦載入,就把單例初始化完成,保證getinstance的時候,單例是已經存在的了,而懶漢比較懶,只有當呼叫getinstance的時候,才回去初始化這個單例;
餓漢式是天生執行緒安全的,而懶漢式有執行緒安全方面的問題;
實現懶漢式執行緒安全
1.在獲取例項的方法上加同步
public
static
synchronized lazysingletontest getinstance1()
return singleton;
}
2.相對於第一種方法效能提公升,不用每次同步
public
static lazysingletontest getinstance2()}}
return singleton;
}
3.靜態內部類
private
static
class
lazyholder
public
static
final lazysingletontest getinstance3()
java設計模式之單例模式
單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...
java設計模式 之 單例模式
單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...
Java設計模式之單例模式
說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...