代码改变世界

设计模式 -- C#单件模式 [转]

  Eric.Hu  阅读(287)  评论(0编辑  收藏  举报

.Net的单件模式.主要为三种.

1、单线程环境下的单件模式实现

 PS. 如果缺少private,编译器会自动生成一个public的构造。所以必须声明一个私有的private构造函数.

复制代码
复制代码
using System;

namespace Singleton
{
    
public class Singleton
    
{
        
private Singleton() { }

        
private static Singleton instance;
        
public static Singleton Instance
        
{
            
get
            
{
                
if(instance == null)
                    instance 
= new Singleton();
                
return instance;
            }

        }

    }

}
复制代码
复制代码

 

2、多线程下使用双重锁定的实现

复制代码
复制代码
using System;

namespace SigletonPattern.Sigleton
{
/// <summary>
/// 功能:在C#用双重锁定实现单件模式
/// 编写:Terrylee
/// 日期:2005年12月06日
/// </summary>

public class DoubLockSigleton
{

//volatile 表示编译器不能自动优化调试语句.(避免调整语句位置和顺序导致初始化时间点不正确.sky)
private static volatile DoubLockSigleton instance;

/// <summary>
/// 辅助锁对象,本身没有意义
/// </summary>

private static object syncRoot = new Object();

/// <summary>
/// 构造方法改为Private
/// </summary>

private DoubLockSigleton()
{

}


public static DoubLockSigleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance 
= new DoubLockSigleton();
}

}


return instance;
}

}


}

}
 
复制代码
复制代码

3、传说为MSDN中的一篇文章提供的方法,利用C#的静态属性和静态构造函数处理原理实现的单件模式。

 

复制代码
复制代码
using System;

namespace Singleton
{
    
public class Singleton
    
{
        
private static readonly Singleton instance = new Singleton();
        
private Singleton() { }
    }

}
复制代码
复制代码

 

编译后查看il可以发现其实是等同于下面的代码的 

复制代码
复制代码
using System;

namespace Singleton
{
    
public class Singleton
    
{
        
private static readonly Singleton instance;
        
static Singleton()
        
{
            instance 
= new Singleton();
        }

        
private Singleton() { }
    }

}
复制代码
复制代码

 

由于C#静态属性和静态构造函数机制,调用静态属性 instance的时候,会先执行类的静态构造函数,而且保证同时只有一个线程能够执行静态构造函数.因此实现了单件模式.

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示