• 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 属性提供了对单例实例的全局访问点。
    饿汉式单例模式的优点是简单、线程安全,但缺点是可能在程序启动时就创建实例,可能会浪费一些资源,特别是在实例的创建和初始化过程较为复杂的情况下。选择使用饿汉式还是懒汉式(延迟初始化)取决于具体的需求和性能考虑。

  • 相关阅读:
    解决bootstrap模态框拖动头部区域,拖出边界,拖不回来
    给想自学python的同学们提的10条建议
    JSON 对比工具
    重置Linux虚拟机密码
    Oracle 账户被锁:the account is locked 解决方法
    面试计算机网络八股文十问十答第九期
    ESP32-C3的存储器类型
    Hadoop生态系统(HDFS、ZooKeeper、MapRuduce、Pig....)
    Java实现Ip地址获取
    python,修改数组【第十届】【省赛】【研究生组】
  • 原文地址:https://blog.csdn.net/yao_hou/article/details/134483174