单例模式

1.懒汉式

/// <summary>
/// 懒汉式:
/// 1.在使用时才实例化
/// 2.多线程不安全
/// </summary>
public class Singleton1
{
    // 定义一个静态变量来保存类的实例
    private static Singleton1? instance;

    // 定义私有构造函数,使外界不能创建该类实例
    private Singleton1()
    {

    }

    // 第一种:定义公有方法提供一个全局访问点
    public static Singleton1 GetInstance()
    {
        if (instance == null)
            instance = new Singleton1();
        return instance;
    }

    // 第二种:定义公有属性来提供全局访问点
    public static Singleton1 Instance 
    { 
        get
        {
            if (instance == null)
                instance = new Singleton1();
            return instance;
        } 
    }
}

2.懒汉式(双重锁定)

/// <summary>
/// 懒汉式(双重锁定):
/// 1.在访问时才实例化
/// 2.多线程安全
/// </summary>
public class Singleton2
{
    private static Singleton2? instance;
    private static readonly object lockObj = new object();

    private Singleton2()
    {

    }

    public static Singleton2 GetInstance()
    {
        // 检查实例是否为空,如果是空则加锁
        if (instance == null)
        {
            // 加锁
            lock (lockObj)
            {
                // 再次检查实例是否为空,如果是空则创建新实例
                if (instance == null)
                    instance = new Singleton2();
            }
        }
        // 返回实例
        return instance;
    }

    // 属性访问
    public static Singleton2 Instance
    {
        get
        {
            if (instance == null)
            {
                lock (lockObj)
                {
                    if (instance == null)
                        instance = new Singleton2();
                }
            }
            return instance;
        }
    }
}

3.饿汉式

/// <summary>
/// 饿汉式:
/// 1.在类加载时初始化
/// 2.多线程安全
/// </summary>
public sealed class Singleton3
{
    // 类加载时就初始化
    private static Singleton3 instance = new Singleton3();

    // 私有构造函数
    private Singleton3()
    {

    }

    // 提供一个全局访问点
    public static Singleton3 GetInstance()
    {
        return instance;
    }
}

相关推荐

  1. 模式模板

    2024-04-27 10:40:03       43 阅读
  2. 模式【C#】

    2024-04-27 10:40:03       54 阅读
  3. python模式

    2024-04-27 10:40:03       62 阅读
  4. 模式详解

    2024-04-27 10:40:03       61 阅读
  5. 模式学习

    2024-04-27 10:40:03       48 阅读
  6. 模式(C++)

    2024-04-27 10:40:03       50 阅读
  7. 设计模式

    2024-04-27 10:40:03       63 阅读
  8. 【C++ 模式

    2024-04-27 10:40:03       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 10:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 10:40:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 10:40:03       82 阅读
  4. Python语言-面向对象

    2024-04-27 10:40:03       91 阅读

热门阅读

  1. electron实现静默打印(各种踩坑解决)

    2024-04-27 10:40:03       37 阅读
  2. Springboot实现串口(RS232)控制【最新】

    2024-04-27 10:40:03       28 阅读
  3. 独孤思维:知行合一的副业魅力

    2024-04-27 10:40:03       32 阅读
  4. 如何在docker上面使用hbase shell

    2024-04-27 10:40:03       35 阅读
  5. macos vscode 激活虚拟环境

    2024-04-27 10:40:03       29 阅读
  6. react的参数值和Vue的参数值有什么区别

    2024-04-27 10:40:03       28 阅读
  7. hbase MultiRowRangeFilter的原理、作用和实例

    2024-04-27 10:40:03       37 阅读
  8. 什么是堆?什么是栈?他们之间从区别和联系

    2024-04-27 10:40:03       35 阅读