首页 > 其他分享 >单例模式

单例模式

时间:2023-04-25 12:44:12浏览次数:37  
标签:Singleton 定义 locker 模式 uniqueInstance 实例 线程 单例

确保一个类只有一个实例,并提供一个全局访问点

     /// <summary>
/// 单例模式的实现
/// </summary>
public class Singleton
{
    // 定义一个静态变量来保存类的实例
    private static Singleton uniqueInstance;

    // 定义一个标识确保线程同步
    private static readonly object locker = new object();

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

    /// <summary>
    /// 定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点
    /// </summary>
    /// <returns></returns>
    public static Singleton GetInstance()
    {
        // 当第一个线程运行到这里时,此时会对locker对象 "加锁",
        // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁
        // lock语句运行完之后(即线程运行完之后)会对该对象"解锁"
        // 双重锁定只需要一句判断就可以了
        if (uniqueInstance == null)
        {
            lock (locker)
            {
                // 如果类的实例不存在则创建,否则直接返回
                if (uniqueInstance == null)
                {
                    uniqueInstance = new Singleton();
                }
            }
        }
        return uniqueInstance;
    }
}

标签:Singleton,定义,locker,模式,uniqueInstance,实例,线程,单例
From: https://www.cnblogs.com/caozhengze/p/17352277.html

相关文章

  • JAVA设计模式学习10——组合模式
    组合模式(Composite)就是把部分和整体的关系用树形的结构来表示,从而使客户端能够把部分对象和组合起来的对象采用同样的方式来看待。树图结构一般包含一个根节点,若干个树枝和叶子节点。如下图:树结构的类图,其实就是组合模式的简略类图,最上面为抽象节点,左下方为叶子节点,右下方为树......
  • 装饰器模式:动态给一个对象添加一些额外的职责
    当我们想要在不改变原有对象的结构和功能的基础上,动态地给一个对象添加一些额外的行为或职责时,可以使用装饰器模式。在装饰器模式中,通常会定义一个抽象装饰器类和具体的装饰器类。抽象装饰器类和被装饰对象实现同样的接口,而具体的装饰器类则包含了一个指向被装饰对象的引用,并且在......
  • Java 反射机制的一个简单例子.
    一、什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++、Open......
  • Java设计模式-简单工厂模式
    简介在软件开发过程中,设计模式是一种被广泛应用的实践,它是通过总结、归纳和提炼出软件设计经验,从而使得设计更加优雅、高效。简单工厂模式是设计模式中最基本、最简单的一种模式,它能够有效地封装对象的创建过程,简化代码结构。简单工厂模式又称为静态工厂方法模式,它是通过定义一......
  • Frida官方文档-操作模式
    Frida通过其强大的用C语言编写的工具核心Gum提供了动态工具。由于这种工具逻辑易于更改,因此您通常希望用脚本语言编写它,以便在开发和维护它时获得简短的反馈循环。这就是GumJS发挥作用的地方。仅需几行C语言,您就可以在可以完全访问GumAPI的运行时中运行一段JavaScript,从而允许您......
  • 设计模式之模板模式(1)
    定义定义一个操作中的算法骨架而将一些步骤延迟到子类中,模板模式使得子类可以在不改变一算法的结构即可重定义该算法的某些特定步骤。使用场景通用的增删改查代码先来看一下外部jar包的导入。在design上右击选择Properities选择AddExternalJars…导入需要的JAR包这里先写一......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......
  • 13命令与迭代器模式
    行为型模式(BehavioralPattern)定义:关注系统中对象之间的交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责行为型模式:不仅仅关注类和对象本身,还重点关注它们之间的相互作用和职责划分分类:类行为型模式:使用继承关系在几个类之间分配行为,主要通过多态......
  • Rust语言 学习17 模式匹配
    一、模式基本概念二、模式可辩驳性三、模式语法......
  • ahk模式窗口
    OwnDialogs:命令Gui+OwnDialogs可以指定窗体上的每个线程(例如ButtonOK子过程)为子窗体,可以使窗体上激活的如MsgBox,InputBox,FileSelectFile,和FileSelectFolder 对话框为当前窗体的子窗体。这些对话框都为模式对话框,也就是说用户必须先关闭这些对话框才能和他们的父窗......