有點類似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/