Singleton pattern 獨體模式

Bear熊
2 min readJan 8, 2020

--

有點類似global variable的感覺,可能整個程式的生命週期只有一個object。

使用 private 把 Constructor 定義下來,這樣其他的程式無法新增此物件

並且使用 GetInstance 來取得物件

class Singleton{
private static Singleton instance;
ptivate Singleton(){}
public static Singleton GetInstance(){
if(instance == null) instance = new Singleton();
return instance;
}

多執行緒下的Singleton pattern

這裡有額外補充若是在multi-thread的環境下的話,為了要讓他Thread safe。在進入GetInstance 的時候要有一個lock控制住。並且提到了Double-Check locking(雙重鎖定)

靜態初始化

意思是當自己被載入的時候就初始化,這樣就不用像上述一樣還要自己處理多執行緒下面的問題。

這樣帶來的問題可能是浪費程式資源(因為還沒跑到就initialize)

public sealed class Singleton{
private static readonly Singleton instance = new Singleton();
...
public static Singleton GetInstance(){
return instance
}
}

PS:
A sealed class is a class or interface which restricts which other classes or interfaces may extend it.

Sealed可以"限定"誰繼承這個Class,其他不行。

sealed interface Shape     permits Circle, Rectangle { ... }

reference : https://www.infoq.com/articles/java-sealed-classes/

--

--

Bear熊
Bear熊

No responses yet