單例設計模式的四種實現方式

2021-10-10 18:44:50 字數 1596 閱讀 3805

單例設計模式的三個要求

只能有乙個例項

必須自行建立自己的唯一例項

要對外提供該例項

方法一:餓漢式
直接建立例項物件,不管你是否需要這個物件都會去建立

/** 

* 方法一

* 單例模式的實現:餓漢式,執行緒安全 但效率比較低

*/public

class

singleton1

// 提供對外使用的唯一例項

public

static singleton1 getinstance()

}

餓漢式的優缺點:

優點:寫起來簡單,沒有執行緒同步問題。

缺點:當類singleton1被載入的時候,會初始化static的instance,靜態變數被建立並分配記憶體空間,從這以後,這個static的instance物件便一直佔著這段記憶體(即便你還沒有用到這個例項),當類被解除安裝時,靜態變數被摧毀,並釋放所占有的記憶體,因此在某些特定條件下會耗費記憶體。

方法二:懶漢式
類載入時沒有建立例項,使用時才會去建立該物件,延遲載入

public

class

singleton2

// 呼叫例項化方法時才會建立該物件

public

static singleton2 getinstance()

return instance;

}}

懶漢式的優缺點:

優點:寫起來簡單,類載入時沒有建立例項,只有呼叫例項化方法時才建立例項,特定條件下節約了記憶體

缺點:併發環境下可能出現多個例項

方法三:執行緒安全的懶漢式
public

class

singleton3

// 使用synchronized修飾保證執行緒安全

public

static

synchronized singleton3 getinstance()

return instance;

}}

執行緒安全的懶漢式優缺點:

優點:多執行緒環境下,保證了懶漢式的執行緒安全

缺點:synchronized在多執行緒環境下效率低下,不是最佳實現

方法四:dcl雙重檢查鎖機制 (dcl:double checked locking)
public

class

singleton4

// 靜態方法返回該例項

public

static singleton4 getinstance()

}}return instance;

}}

dcl雙重檢查鎖機制是單例模式的最佳實現,記憶體占用低,效率高,執行緒安全,多執行緒操作保證原子性。

四種方式實現單例模式

乙個類中只有乙個例項,除此外沒有其他的例項模式,有三種特性 構造器不可被外部建立 限制了外部的訪問方式 內部保證例項唯一 現在來介紹四種方式 public class singletonpattern01 public static singletonpattern01 getsingletonpa...

單例模式的四種實現方式

單例模式 多次例項化的結果指向同一例項 一,單例模式實現方式一 import settings class mysql instance none def init self,ip,sport self.ip ip self.port port classmethod def from conf c...

四種單例設計模式

public class singletonlazy 私有化該類的構造器 public static singletonlazy getinstance 如果沒有例項,就建立乙個 return instance 返回例項物件 public class singletonhungary 私有化該類的構...