[转]C#下的单例实现
上一篇 / 下一篇 2010-05-03 11:22:29 / 个人分类:设计模式
本文介绍了C#下关于单例的三种实现方法。
dg)EXc7Y0
最普通的一种:51Testing软件测试网 ac-ZS)V
51Testing软件测试网D2M8igUcs
以下是引用片段: :NYGzX"Wd;t \0 using System; K%Uh w.t0 public class Singleton {/P/_t,pRsl0 { 51Testing软件测试网rv`#kX;{8RJ?{,RJt private static Singleton instance; 51Testing软件测试网6u'R%AH.n~K-t,z h private Singleton() {} zXW{5?T6k0 public static Singleton Instance 51Testing软件测试网 _R0\)p| Fw6h { 51Testing软件测试网KwfCd1Y#p C get 51Testing软件测试网f)Hi S;ylz { 51Testing软件测试网+Q/lo `z`7[? if (instance == null) 51Testing软件测试网\b3u7_;byznK+J5A instance = new Singleton(); *?-A8d7u6Y$[X}D0 return instance; 51Testing软件测试网(snbZ2hL}+k } 7o%]5ET d"g{Hw0 } 51Testing软件测试网vG+G$~'Uf y,Y,K } |
这种方案在.Net下面是线程不安全的,每个线程进来会创建不同的类型实例。51Testing软件测试网8aL_+R4@:RW9w%]
下面是一种在.Net公共语言运行环境下的线程安全单例实现模式:51Testing软件测试网M-Qthw*[.U
N:VBM t)Kx)@X0以下是引用片段:51Testing软件测试网CU\/o[W)Fd&Y public sealed class Singleton 51Testing软件测试网)G:^bX yq fefy { 51Testing软件测试网'tD4_{(Q4^V?e private static readonly Singleton instance = new Singleton(); 51Testing软件测试网G5`'x QN| private Singleton(){} !S/s,|[E0 public static Singleton Instance 51Testing软件测试网7a:[(oY#\T:{i { 8JW p"n7YOhl0 get 51Testing软件测试网[9oSY C(Q%T { !})Q#M4_}4p2Xg)[0 return instance; #j~#L0}4Z3?2Qs0 } 7H)JzZ?u0 } 51Testing软件测试网`!pBk.V0d@Gj } |
51Testing软件测试网N LH6Oe)Y
它是依靠公共语言运行时的能力来构造的线程安全模式,在别的语言环境中是不适用的。51Testing软件测试网 C-hl_O tL$^ ml4k Jr
基于此加上.Net对泛型的支持,我们可以做一个通用的泛型单例Provider, 代码如下:
$U!j_Zn"x4vs nEFQ051Testing软件测试网 [%T8j8O"@-\M
以下是引用片段: ^eH,Q%H?(Np+J0 public class SingletonProvider where T : new() |