• C#单例模式懒汉式与饿汉式


    单例模式一般分为懒汉模式和饿汉模式,懒汉式单例在第一次引用时创建实例,不是在类加载时;饿汉式单例模式是一种在类加载时就创建实例的方式,因此也称为静态初始化。
    在这里插入图片描述
    单例模式实现的技巧时构造私有,向外提供静态实例。

    懒汉式单例模式实现

    public class Singleton
    {
        private static Singleton instance = null;
    
        private Singleton() {}
    
        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    线程安全的懒汉式

    为了确保线程安全,在懒汉式的基础上添加锁。

    public class Singleton
    {
        private static Singleton instance = null;
        private static readonly object padlock = new object();
    
        private Singleton() {}
    
        public static Singleton Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                    return instance;
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    使用Lazy实现懒汉式单例模式

    使用 Lazy:线程安全,支持延迟初始化,简化代码。

    public class Singleton
    {
        private static readonly Lazy<Singleton> lazy =
            new Lazy<Singleton>(() => new Singleton());
    
        public static Singleton Instance { get { return lazy.Value; } }
    
        private Singleton() {}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    饿汉式单例实现

    public class Singleton
    {
        // 在类加载时就创建实例
        private static readonly Singleton instance = new Singleton();
    
        // 私有构造函数,确保外部不能通过new创建实例
        private Singleton() {}
    
        // 提供一个全局访问点
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    
        // 你可以在这个类中添加其他功能
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在饿汉式单例实现中,类中的 instance 字段在类加载时就被初始化,因此在多线程环境下也是线程安全的。
    构造函数是私有的,防止外部通过new关键字创建实例。
    通过 Instance 属性提供了对单例实例的全局访问点。
    饿汉式单例模式的优点是简单、线程安全,但缺点是可能在程序启动时就创建实例,可能会浪费一些资源,特别是在实例的创建和初始化过程较为复杂的情况下。选择使用饿汉式还是懒汉式(延迟初始化)取决于具体的需求和性能考虑。

  • 相关阅读:
    用 NEON 实现高效的 FIR 滤波器
    ThreadPoolExecutor BlockingQueue讲解
    【微信小程序】解决分页this.setData数据量太大的限制问题
    基于卷积神经网络的苗语孤立词语音识别
    Vue事件修饰符的使用
    KVM虚拟化介绍和安装使用方法
    炫酷的表白烟花 html+css+js实现的表白烟花特效(程序员专属情人节表白网站)
    CUDA By Example(二)——CUDA C简介
    TPU编程竞赛|算丰助力2023 CCF大数据与计算智能大赛!
    dvwa-暴力破解(low-high)
  • 原文地址:https://blog.csdn.net/yao_hou/article/details/134483174