单例模式的C#实现
来源:互联网 发布:斗地主辅助软件 编辑:程序博客网 时间:2024/05/23 01:08
借鉴各路大神的博客,也就不做链接了
class SingletonPattern { public sealed class Singleton1 { private static readonly Singleton1 instance = new Singleton1(); static Singleton1() { } private Singleton1() { } public static Singleton1 Instance { get { return instance; } } //测试方法 public void Hello() { Console.WriteLine("Hello1"); } } public sealed class Singleton2 { private static readonly Singleton2 instance = null; static Singleton2() { instance = new Singleton2();//静态初始化,不同于Singleton1 } private Singleton2() { } public static Singleton2 Instance { get { return instance; } } //测试方法 public void Hello() { Console.WriteLine("Hello2"); } } public sealed class Singleton3 { private static readonly Lazy<Singleton3> lazy = new Lazy<Singleton3>(() => new Singleton3()); public static Singleton3 Instance { get { return lazy.Value; } } private Singleton3() { } //测试方法 public void Hello() { Console.WriteLine("Hello3"); } } /// <summary> /// 最简单的单例,但线程不安全,对于单线程已然满足 /// </summary> public sealed class Singleton4 { private static Singleton4 instance = null; private Singleton4() { } public static Singleton4 Instance { get { if (instance == null) { instance = new Singleton4(); } return instance; } } //测试方法 public void Hello() { Console.WriteLine("Hello4"); } } /// <summary> /// 一重加锁,增加开销,保证线程安全 /// </summary> public sealed class Singleton5 { private static Singleton5 instance = null; private static readonly object padlock = new object(); private Singleton5() { } public static Singleton5 Instance { get { lock (padlock) { if (instance == null) { instance = new Singleton5(); } return instance; } } } //测试方法 public void Hello() { Console.WriteLine("Hello5"); } } /// <summary> /// 两重加锁,减少一重加锁的性能消耗,线程安全 /// </summary> public sealed class Singleton6 { private static Singleton6 instance = null; private static readonly object padlock = new object(); private Singleton6() { } public static Singleton6 Instance { get { if (instance == null) { lock (padlock) { if (instance == null) { instance = new Singleton6(); } } } return instance; } } //测试方法 public void Hello() { Console.WriteLine("Hello6"); } } public sealed class Singleton7 { private Singleton7() { } public static Singleton7 Instance { get { return Nested.instance; } } private class Nested//通过内嵌的私有类做延时初始化 { static Nested() { } private Nested() { } internal static readonly Singleton7 instance = new Singleton7(); } //测试方法 public void Hello() { Console.WriteLine("Hello7"); } } public sealed class Singleton8 { private Singleton8() { } public static Singleton8 Instance { get { return Nested.instance; } } private class Nested { internal static readonly Singleton8 instance = null; static Nested() { instance = new Singleton8();//都是延时初始化,但不同于Singleton7的是静态初始化,类似Singleton1和Singleton2的区别 } private Nested() { } } //测试方法 public void Hello() { Console.WriteLine("Hello8"); } } //对于使用Unity的朋友Singleton4够了 }
阅读全文
0 0
- C# 单例模式的实现
- 单例模式的C#实现
- C# 单例模式实现
- 单例模式的五个实现方法比较 via C#
- 单例模式的泛型实现 C#
- C#单例模式的几种实现方式
- 总让人忘记的单例模式C#代码实现
- 转贴---单例模式(C#实现)
- 单例模式(C#实现)
- 单例模式(C#实现)
- 单例模式(C#实现)
- C# Lazy<T>实现单例模式
- Unity3d中C#单例模式实现
- C# 中实现单例模式
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- html旋转动画
- App瘦身
- response对象的使用
- POJ 3253
- 声明和定义
- 单例模式的C#实现
- java线程池的总结
- c# 文件操作
- 转自mbxc816 欧拉函数递推
- 莫(bao)队(li)算法
- 如何把一个单例模式写出花来
- 通过Android.mk文件在源码下生成jar
- ubuntu的mysql用windows客户端无法连接的解决方法
- 【HTML5学习笔记】32:CSS3变形效果 下