Singleton實現比較

2021-05-25 06:48:58 字數 1407 閱讀 6479

執行下圖中

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...