單例模式(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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...