C#设计模式:深入解析单例模式的四种实现
163 浏览量
更新于2024-09-01
收藏 80KB PDF 举报
"本文介绍了C#设计模式中的单例模式,包括其实现方式和应用场景,并提供了四种不同的实现方式:饿汉式、懒汉式、双重验证式和静态内部类的示例代码,分析了它们的优缺点。"
在C#编程中,设计模式是一种解决常见问题的模板,单例模式是其中之一,它的核心思想是确保类在整个应用程序中只有一个实例,并提供全局访问点。单例模式广泛应用于资源管理、配置管理等场景,如Windows的任务管理器、IIS的HttpApplication和项目中的日志组件。
### 单例模式的实现方式
#### 1. 饿汉式
饿汉式在类加载时就创建了单例对象,保证了线程安全,但可能会造成不必要的内存浪费。示例代码如下:
```csharp
public class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton() { Console.WriteLine("我被创建了.饿汉式"); }
public static Singleton GetInstance() { return instance; }
public void ShowMessage() { Console.WriteLine("HelloWorld.饿汉式"); }
}
```
优点:没有同步问题,执行效率高。
缺点:类加载时就初始化,可能导致内存浪费,未实现延迟加载。
#### 2. 懒汉式
懒汉式在首次调用时才创建实例,实现了延迟加载,但不保证线程安全。示例代码如下:
```csharp
public class Singleton
{
private static Singleton instance;
private Singleton() { Console.WriteLine("我被创建了.懒汉式"); }
public static Singleton GetInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
public void ShowMessage() { Console.WriteLine("HelloWorld.懒汉式"); }
}
```
优点:延迟加载,节约内存。
缺点:多线程环境下可能导致多个实例,线程安全性不足。
#### 3. 双重验证式
双重验证式结合了饿汉式的线程安全和懒汉式的延迟加载。示例代码如下:
```csharp
public class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new object();
private Singleton() { Console.WriteLine("我被创建了.双重验证式"); }
public static Singleton GetInstance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
public void ShowMessage() { Console.WriteLine("HelloWorld.双重验证式"); }
}
```
优点:线程安全且延迟加载。
缺点:加锁降低了性能。
#### 4. 静态内部类
静态内部类方式在保证线程安全的同时,也实现了延迟加载,通过类加载机制确保了单例的唯一性。示例代码如下:
```csharp
public class Singleton
{
private Singleton() { Console.WriteLine("我被创建了.静态内部类"); }
private static class SingletonHolder
{
internal static readonly Singleton Instance = new Singleton();
}
public static Singleton GetInstance() { return SingletonHolder.Instance; }
public void ShowMessage() { Console.WriteLine("HelloWorld.静态内部类"); }
}
```
优点:线程安全,延迟加载,无需额外的同步控制。
缺点:相比其他方式,实现较为复杂。
在实际开发中,应根据项目需求选择合适的方式来实现单例模式,如对性能要求较高,可考虑双重验证式;对内存管理敏感,则可以选择静态内部类。在多线程环境下,确保线程安全尤为重要,否则可能导致程序运行异常。
2018-06-01 上传
2013-08-13 上传
2021-01-19 上传
2021-01-21 上传
2020-09-04 上传
2020-12-22 上传
点击了解资源详情
点击了解资源详情
2010-03-12 上传
weixin_38702047
- 粉丝: 3
- 资源: 967
最新资源
- Haskell编写的C-Minus编译器针对TM架构实现
- 水电模拟工具HydroElectric开发使用Matlab
- Vue与antd结合的后台管理系统分模块打包技术解析
- 微信小游戏开发新框架:SFramework_LayaAir
- AFO算法与GA/PSO在多式联运路径优化中的应用研究
- MapleLeaflet:Ruby中构建Leaflet.js地图的简易工具
- FontForge安装包下载指南
- 个人博客系统开发:设计、安全与管理功能解析
- SmartWiki-AmazeUI风格:自定义Markdown Wiki系统
- USB虚拟串口驱动助力刻字机高效运行
- 加拿大早期种子投资通用条款清单详解
- SSM与Layui结合的汽车租赁系统
- 探索混沌与精英引导结合的鲸鱼优化算法
- Scala教程详解:代码实例与实践操作指南
- Rails 4.0+ 资产管道集成 Handlebars.js 实例解析
- Python实现Spark计算矩阵向量的余弦相似度