單例設計模式

2021-09-25 21:56:17 字數 1719 閱讀 7054

​ 它是解決某類問題的一套有效的方案(模版)。

1、私有本類所有的構造方法;

2、建立本類的物件;

3、對外提供乙個靜態的方法來獲取物件。

1、餓漢式:

class

single

// 在類中建立自己的物件

private

static single instance =

newsingle()

;// 對外提供get方法,獲取類中唯一的物件

public

static single getinstance()

}

2、懶漢式:(常面)
class

single

// 只定義變數,不建立物件

private

static single instance = null;

// 對外提供方法,獲取本類物件

public

static single getinstance()

// 有則直接返回該物件

return instance;

}}

1、單例解決的問題是什麼?

​ 保證當前的物件在程式中只有乙個(物件唯一)。

2、單例模式方法上為什麼要加靜態?

​ 新增靜態的目的是保證外界可以通過類名呼叫該方法,從而拿到本類的唯一的那個物件。

​ 因為這個類以外的地方沒有辦法建立類的物件,如果 getinstance 方法不是靜態的,導致類以外的別的程式根本就無法獲取到這個類的物件了,只有將 getinstance 方法靜態了,外界才能通過唯一的這個方法來得到這個類的唯一的那個物件。

3、懶漢式在多執行緒操作的時候有沒有安全問題?

​ 有,在 getinstance 方法中的判斷和賦值兩行**上操作共享的 instance 變數,這樣在操作的過程中cpu會隨機切換,可能出現安全問題。

​ 解決方案:在判斷和賦值**上新增同步**塊。

4、新增同步時效率會降低,能不能優化?

​ 可以。如下所示:

class

single

private

static single instance = null;

/* a.可以定義乙個物件作為同步的鎖物件—-> synchronized(lock)

* private static object lock = new object();

* b.因為是靜態同步的方法,所以還可以使用格式:synchronized(single.class)

* * 1、此處新增靜態的目的是保證外界可以通過類名呼叫方法名,從而拿到本類的唯一的那個物件

* 2、同步(synchronized)不能新增在此處方法上,會影響後續執行緒獲取唯一物件的效率

*/public

static single getinstance()

}}return instance;}}

//書寫執行緒的任務類

class

demo

implements

runnable

}//書寫乙個測試類

public

class

singletest

}

5、能不能將 synchronized 新增到 run 方法上,為什麼?

按照語法規則,是可以在run方法上書寫同步的

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

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

設計模式 單例設計模式

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

設計模式 單例設計模式

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