設計模式 單例(單件)模式

2021-09-17 21:55:07 字數 1300 閱讀 1528

獨一無二的物件

有什麼用?

有很多物件我們只需要乙個:

eg:執行緒池、快取、登錄檔、日誌物件等。
這些類我們只需要乙個,如果製造出多個例項,會導致許多問題的產生。

eg:程式的行為異常、資源使用過量、結果不一致
下面是單件模式的**:

public

class

singlemode

// 提供乙個公共獲取該類例項的靜態方法

public

static singlemode getinstance()

return instance;

}}

這是最經典的延遲例項化的單例模式寫法,我們可以在使用的時候才建立。可是這個寫法不適合多

執行緒,如果多個執行緒同時第一次呼叫獲取該類例項的方法,可能會建立兩個例項物件

我們可以通過給獲取該例項的靜態方法加上(synchronized)關鍵字

//	提供乙個公共獲取該類例項的方法

public

static

synchronized singlemode getinstance()

return instance;

}

這種方法雖然可以解決多執行緒問題,但是我們只需要在第一次呼叫次方法的時候,才需要同步。

但 是我們設定了synchronized關鍵字以後,我們每次呼叫這個方法都需要同步,成了一種累贅

,會降低我們的執行效率。

我們可以依賴jvm在載入這個類的時候馬上建立此唯一的例項,**如下:

public

class

singlemode

public

static

synchronized singlemode getinstance()

}

還可以利用雙重檢查來完善單例模式,如果沒有建立該物件,我們就進行同步,也就是說,只有第一次才會進行同步:

public

class

singlemode

// 提供乙個公共獲取該類例項的方法

public

static singlemode getinstance()

}}return instance;

}}

設計模式(五) 單件模式(單例模式)

三 單件模式的多執行緒安全問題 參考確保乙個類只有乙個例項,並提供乙個全域性訪問點。單件模式即單例模式。使用場景很多,比如多個程式都要使用乙個配置檔案中的資料,而且要實現資料共享和交換。必須要將多個資料封裝到乙個物件中,而且多個程式操作的是同乙個物件,也就是說必須保證這個配置檔案物件的唯一性。有兩種...

單件模式(單例模式)

readme 0.1 本文部分描述 head first 設計模式 旨在學習 單件模式 單例模式 的相關知識 及其應用 單件模式 1.0 單件模式的應用背景 有一些物件其實我們只需要乙個,比方說 執行緒池,快取,對話方塊,登錄檔等的物件,這都可以通過單件模式來解決 1.1 定義 確保乙個類只有乙個例...

單件模式(單例模式)

1 單件模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。2 經典的單件模式實現 public class singleton public static singleton getinstance return uniqueinstance 問題點 public static singleto...