C#设计模式之单例模式实例讲解
一、什么是单例模式?
单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供全局访问点。通常情况下,我们使用单例模式来控制某些资源的共享,比如全局唯一的日志对象、数据库连接等。
二、如何实现单例模式?
在C#语言中,我们可以通过多种方式实现单例模式。下面就介绍其中的两种方式:饿汉式单例和懒汉式单例。
1. 饿汉式单例
饿汉式单例是指在类被加载的时候就创建实例。它的优点是线程安全,缺点是可能会浪费一些系统资源,因为有可能在实际使用之前就已经创建了单例对象。
示例代码如下:
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton Instance => instance;
}
2. 懒汉式单例
懒汉式单例是指只有在需要的时候才会创建实例。它的优点是避免了无谓的资源浪费,但是在多线程环境下可能会出现问题,需要做一些同步措施。
示例代码如下:
public class SingletonLazy
{
private static SingletonLazy instance;
private static readonly object lockObj = new object();
private SingletonLazy() {}
public static SingletonLazy Instance
{
get
{
if (instance == null)
{
lock(lockObj)
{
if (instance == null)
{
instance = new SingletonLazy();
}
}
}
return instance;
}
}
}
三、单例模式的应用
单例模式的应用非常广泛,下面就介绍两个实例。
1. 配置管理器
我们通常会使用配置文件来保存某些应用的基本配置信息,比如数据库连接字符串,邮箱设置等。为了保证这些配置信息的全局唯一性,可以使用单例模式来实现配置管理器。
示例代码如下:
public class ConfigManager
{
private static ConfigManager instance = new ConfigManager();
private ConfigManager() {}
public static ConfigManager Instance => instance;
public string GetConfig(string key)
{
// 根据键获取配置信息
}
}
2. Windows窗口管理器
在Win32编程中,我们经常需要管理多个窗口。为了避免创建多个窗口管理器实例,我们可以使用单例模式来保证全局唯一性。
示例代码如下:
public class WindowManager
{
private static WindowManager instance;
private static readonly object lockObj = new object();
private WindowManager() {}
public static WindowManager Instance
{
get
{
if (instance == null)
{
lock(lockObj)
{
if (instance == null)
{
instance = new WindowManager();
}
}
}
return instance;
}
}
public void AddWindow(Window window)
{
// 添加窗口
}
public void RemoveWindow(Window window)
{
// 移除窗口
}
}
四、总结
单例模式是一种非常常用的设计模式,它能够保证某些对象的全局唯一性,避免出现共享资源不一致的情况。本文介绍了单例模式的两种实现方式,以及它的两个应用实例,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#设计模式之单例模式实例讲解 - Python技术站