程序员之家
程序员之家

C# 单例模式的多种实现

2024-11-08 17:23:48 338
单例模式是一种创建型设计模式,它主要确保在一个类只有一个实例,并提供一个全局访问点来获取该实例。在C#中,有多种方式实现单例模式,每种方式都有其特定的使用场景和注意事项。

单例模式介绍

单例模式是一种创建型设计模式,它主要确保在一个类只有一个实例,并提供一个全局访问点来获取该实例。在C#中,有多种方式实现单例模式,每种方式都有其特定的使用场景和注意事项。


设计模式的作用

  • 提高代码的可重用性:通过定义一套标准的解决方案,设计模式使得相同或类似的问题可以在不同的项目中复用相同的代码结构或逻辑。
  • 增强代码的可读性:设计模式使用清晰、简洁的方式表达复杂的代码逻辑,使得其他开发者能够更容易地理解和维护代码。
  • 提高系统的可维护性:设计模式遵循一定的设计原则,如开闭原则、里氏代换原则等,这些原则有助于降低系统各部分的耦合度,提高系统的可扩展性和可维护性。

饿汉式单例模式

饿汉式单例是在类加载时就创建实例。优点是实现简单,缺点是如果该实例不被使用会造成资源浪费。

/// <summary>
/// 饿汉式单例模式
/// </summary>
public class SingletonEager
{
    private SingletonEager() { }

    private static readonly SingletonEager _instance = new SingletonEager();

    public static SingletonEager Instance
    {
    get { return _instance; }
    }

    public void DoSomething()
    {
    Console.WriteLine("饿汉式单例模式.");
    }
}

懒汉式单例模式

懒汉式单例在第一次被访问时才创建实例。为了线程安全,通常需要使用锁机制。

/// <summary>
/// 懒汉式单例模式
/// </summary>
public class SingletonLazy
{
    private SingletonLazy() { }

    private static SingletonLazy? _instance;

    private static readonly object _lockObj = new object();

    public static SingletonLazy Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_lockObj)
                {
                    if (_instance == null)
                    {
                        _instance = new SingletonLazy();
                    }
               }
            }
            return _instance;
        }
    }

    public void DoSomething()
    {
        Console.WriteLine("懒汉式单例模式.");
    }
}

懒加载单例模式

如果您使用的是 .NET 4(或更高版本),可以使用Lazy类来实现线程安全的懒加载单例模式。

/// <summary>
/// 懒加载单例模式
/// </summary>
public sealed class SingletonByLazy
{
    private static readonly Lazy<SingletonByLazy> _lazy = new Lazy<SingletonByLazy>(() => new SingletonByLazy());

    public static SingletonByLazy Instance { get { return _lazy.Value; } }

    private SingletonByLazy() { }

    public void DoSomething()
    {
        Console.WriteLine("懒加载单例模式.");
    }
}

手机扫码阅读本文


本文来自互联网,本网站转载的目的在于传递更多信息以供访问者学习参考,所属内容只代表原作者的个人观点,不代表本网站的立场和价值判断,版权归原作者所有。如有侵犯您的版权,请联系我们,我们收到后会尽快核实并第一时间改正。


手机扫码阅读本文

C# 7.0核心技术指南(原书第7版)【图】
C# 7.0核心技术指南(原书第7版)

将回答你在C#7.0.NETCLR和核心框架程序集遇到的各种问题

基于Go语言的云原生【图】
基于Go语言的云原生

本书很好地将“云原生”的高级概念带到现实,并使用现代计算语言Go来实现。这两个概念的结合效果很好,带给我们许多灵感。

C++标准库【图】
C++标准库

畅销全球 阔别12载携C++11新标准重磅归来 全面覆盖新标准新成员新特性 全书例子完全基于C++11重写

B202411085492