單例模式(Singleton Pattern)主要的精神是希望某個類別在程式的生命週期期間,被建立的實體只會有一個。 也就是程式不管在什麼地方都可以建立該物件的實體,但是如果該物件的實體已經存在,那麼就直接回傳已經存在的那個實體。 所以這個類別必須提供一個公開的方法讓其他人取得自已的實體。 例如像 ThreadPool、Cache、Registry 等等的這類物件就常會使用到單例模式來設計。 另外像一些管理類型的 Class ,在程式運作時只需要一個,也很適合使用單例模式設計。
單例模式有點類似靜態物件,主要的差別在於,靜態物件是在程式載入時就會同時被建立起來,而單例模式是必須等到該物件首次被使用到時才會載入(Lazy Instantiaze)。 除此次外,靜態類別無法被繼承,而單例模式可以,也就表示它可以被繼承後再擴充其他的方法。
public class MyClass
{
public int test = 1;
private static MyClass _myclass = new MyClass();
// 為了不被外界直接 new 出實體,所以將建構子設定為 private ,
private MyClass()
{
}
// 外界只能使用這個靜態方法取得實例
public static MyClass GetInstance()
{
return _myclass;
}
public void DoSomething()
{
Console.WriteLine(test++);
}
}
static void Main()
{
MyClass mgr1 = MyClass.GetInstance();
mgr1.DoSomething(); //1
mgr1.DoSomething(); //2
MyClass mgr2 = MyClass.GetInstance();
mgr2.DoSomething(); //3
mgr2.DoSomething(); //4
}
沒有留言:
張貼留言