獨一無二的物件
有什麼用?
有很多物件我們只需要乙個:
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...