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("懒加载单例模式.");`
`            }`
`        }`

设计模式入门实战教程

https://mp.weixin.qq.com/s/FM0ThUR92EcXJ3YY313ifw

相关推荐
追逐时光者2 天前
精选 14 款 .NET 开源、功能强大的快速开发框架,提高开发生产效率、避免工作996!
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者12 天前
C#/.NET/.NET Core技术前沿周刊 | 第 34 期(2025年4.7-4.13)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者12 天前
Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提效!
【visual studio】·【.net】·【c#】·【.net core】
追逐时光者16 天前
一款让 Everything 更加如虎添翼的 .NET 开源辅助工具!
【.net】·【c#】·【开源项目】·【实用工具】
追逐时光者16 天前
C# LINQ 快速入门实战指南,建议收藏学习!
【.net】·【c#】·【.net core】·【拾遗补漏】·【linq】
追逐时光者19 天前
DotNetGuide 突破了 8K + Star,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库!
【.net】·【c#】·【开源项目】·【.net core】·【面试指南】