設計模式 單例模式

2021-09-29 06:35:25 字數 1290 閱讀 8076

單例模式(singleton pattern),是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只有乙個物件例項。如果僅僅是提供全域性訪問的方法,這種情況下考慮使用靜態方法,當類中需要訪問資源並需要關注類中物件狀態時,則應該使用單例模式。如eventbus,內部快取了訂閱者及其訂閱方法的資訊,所以各個元件需要向同乙個eventbus物件註冊自己,才能接收到event事件,所以需要全域性唯一的物件。單例模式有多種寫法。

1.懶漢模式

//懶漢模式(執行緒不安全)

public class singleton

//用synchronized關鍵字修飾方法,可保證執行緒安全

private static singleton getinstance()

return instance;

}}

這種寫法在使用者第一次呼叫時初始化,所以第一次載入稍慢,而且執行緒不安全。可用synchronized修飾getinstance()方法保證執行緒安全,但每次呼叫此方法都需要進行同步,會造成不必要的開銷。

2.餓漢模式

/餓漢模式

public class singleton

public static singleton getinstance()

}

這種寫法在類載入時就完成了初始化,所以載入較慢,但獲取物件較快。這種方式基於類載入機制,避免了多執行緒問題,但如果從始至終都沒有使用,會造成記憶體的浪費。

3.雙重檢驗機制(dcl)

//雙重檢查模式

public class singleton

private static singleton getinstance()}}

return instance;

}}

4.靜態內部類模式

//靜態內部類模式

public class singleton

public static singleton getinstance()

private static class singletonholder

}

第一次載入類並不會初始化instance,只有第一次呼叫getinstance()方法時才會載入內部類並初始化instance,不僅保證執行緒安全,也能確保唯一性。

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...