程序员之家
程序员之家

C# 单例模式的多种实现

2024-11-08 17:23:48 708
单例模式是一种创建型设计模式,它主要确保在一个类只有一个实例,并提供一个全局访问点来获取该实例。在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和核心框架程序集遇到的各种问题

Python 从入门到精通【图】
Python 从入门到精通

Python入门经典,26万Python程序员的入行选择。配备升级版Python开发资源库,在线大咖课+在线答疑,学习1小时,训练10小时

深入理解Go并发编程:从原理到实践,看这本就够了【图】
深入理解Go并发编程:从原理到实践,看这本就够了

以漫画与通俗易懂的语言阐释复杂的并发概念,让读者在轻松愉悦中掌握Go语言强大的并发能力。一线互联网大厂名家之作。

B202411085492