設計模式 單例模式

2022-03-10 20:52:44 字數 1904 閱讀 2270

保證一類僅有乙個例項,並提供乙個訪問它的全域性訪問點

缺點:保證單一例項:建立private static型別的物件instance,其為空時才new例項化建立

全域性訪問點:建立public類getinstance()方法用於全域性訪問instance,並擔當檢測、new instance的責任

//單例類:

class singleton

//單一的例項

private static singleton instance;

//全域性訪問點

public static singleton getinstance()

else

return instance;

}}//測試類:

class program

}

根據new關鍵字例項化單例的先後順序,可把單例模式分為餓漢式單例、懶漢式單例

//餓漢式:開始時就例項化instance

public class singleton

private static singleton instance = new singleton();

public static singleton getinstance()

}

//懶漢式:需要時才例項化instance

public class singleton

private static singleton instance;

public static singleton getinstance()

}

在上述懶漢式單例中,若多個執行緒同時進行到if (instance == null),會全部檢測通過,最終造成多執行緒下建立了多個例項,即多執行緒不安全。因此需要對多執行緒下的單例模式進行調整,使用lock機制實現執行緒安全

//餓漢式 + 執行緒安全 + 單鎖

class singleton

private static singleton instance;

//靜態唯讀物件用於輔助實現lock

private static readonly object locker = new object();

public static singleton getinstance()

return instance;}}

雖然加了lock鎖實現了懶漢模式下的執行緒安全,但我們不難發現乙個問題:若已經存在instance例項,在執行getinstance()時還有必要lock{}嗎?顯然不需要,lock的使用必然是消耗一定空間的,因此為了節省lock的空間,採用更優解法:雙重鎖定(double-check-locking)

//餓漢式 + 執行緒安全 + 雙鎖

class singleton

private static singleton instance;

//靜態唯讀物件用於輔助實現lock

private static readonly object locker = new object();

public static singleton getinstance()

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