執行下圖中
c#**,輸出的結果是什麼?並請比較這兩個型別各有什麼特點,有哪些區別。
namespace
singleton
public
static
void print()
private
static
singleton1 instance = new
singleton1 ();
public
static
singleton1 instance
} }
public
sealed
class
singleton2
public
static
void print()
public
static
singleton2 instance
} class
nested
internal
static
readonly
singleton2 instance = new
singleton2 (); }
} class
program
} }
答案:
輸出三行:第一行
「singleton1 constructed」
,第二行
「singleton1 print」
,第三行
「singleton2 print」。
當我們呼叫
singleton1.print
時,.net
執行時會自動呼叫
singleton1
的靜態建構函式,並初始化它的靜態變數。此時會建立乙個
singleton1
的例項,因此會呼叫它的建構函式
。singleton2
的例項是在
nested
的靜態建構函式裡初始化的。只有當型別
nested
被使用時,才回觸發
.net
執行時呼叫它的靜態建構函式。我們注意到我們只在
sington2.instance
裡面用到了
nested
。而在我們的**中,只呼叫了
singleton2.print
。因此不會建立
singleton2
的例項,也不會呼叫它的建構函式。
這兩個型別其實都是單例模式(
singleton
)的實現。第二個實現
singleton2
只在真的需要時,才會建立例項,而第乙個實現
singleton1
則不然。第二個實現在空間效率上更好。
Singleton的實現方式
於 設計模式之禪 秦小波著 1.餓漢模式 推薦 package com.zby.singleton 餓漢模式,推薦 public class singleton1 public static singleton1 getinstance public static void dosomething ...
Singleton模式的實現
設計乙個類,我們只能生成該類的乙個例項。因為我們只能生成乙個例項,所以我們必須把建構函式設定為私有函式已禁止他人建立例項。可以定義乙個靜態的例項,在需要的時候建立該例項。public sealed class sinleton1 private static singleton1 instance ...
實現singleton模式2
package swordoffre.gaopengyu 劍指offer2題 實現singleton模式 public class singleton2 private static singleton2 singleton new singleton2 public static singleto...