设计模式学习笔记之单件模式

ANSYS 有限元分析 接触分析 目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY 阅读详情

存在目地:保证一个类仅有一个实例,并提供一个全局访问点。

应用场景:只有一个实例才符合逻辑的正确性,如总统仅有一个;

                    具有相同职责时,没有必要建立多个实例,避免频繁构造减少性能损失浪费资源。

具体实例:.NET Remoting中服务器激活对象中的Sigleton对象,确保所有的客户程序的请求都只  有一个实例来处理。系统中只能有一个窗口管理器。

实现方式:

1,  单线程下惰性加载实现方式

public sealed class Singleton

{

    // 仅仅提供声明

    private static Singleton instance;

    // 构造函数是私有的

    private Singleton()

    {

    }

    public static Singleton Instance

    {

        get

        {

            if (instance==null)

            {

                // 惰性初始化

                instance = new Singleton();

            }

            return instance;

        }

    }

}

客户端在实际的使用中通过静态的Instance属性就可以获得一个唯一的实例。惰性实例化直到对象要求产生一个实例才执行实例化,避免了在应用程序启动时就实例化不必要的singleton。在多线程环境下它是不安全的,可能会创建多个 Singleton对象实例。

2,  线程安全的非惰性加载实现方式--静态初始化

public sealed class Singleton

{

   private static readonly Singleton instance = new Singleton();

   private Singleton(){}

   public static Singleton Instance

   {

      get

      {

         return instance;

      }

   }

}

实现简单,线程安全,缺陷主要是实例不是惰性加载的,多数情况下首选方式。私有的构造函数和readonly(只读)保证了Singleton不会被再次实例化。 

3,  多线程下实现方式

public sealed class Singleton

{

    private static Singleton instance;

    private static readonly object padlock = new object();

    private Singleton()

    {

    }

    public static Singleton Instance

    {

        get

        {

            lock (padlock)

            {

                if (instance==null)

                {

                    instance = new Singleton();

                }

                return instance;

            }

        }

    }

}

做到了线程安全,同时也实现了惰性加载机制。不足之处是lock可能会对大量的并发访问的效率造成影响,但一般的应用中这样的效率损失可以忽略不计,足矣。

线程在进入时先对辅助对象加锁然后再检测对象是否被创建,这样可以确保只有一个实例被创建,因为在同一个时刻加了锁的那部分程序只有一个线程可以进入。这种情况下,对象实例由最先进入的那个线程创建,后来的线程在进入时(instence == null)为假,不会再去创建对象实例了。

4,  高效的多线程下实现方式—双重锁定

public sealed class Singleton

{

    private static Singleton instance;

    private static readonly object padlock = new object();

    private Singleton()

    {

    }

    public static Singleton Instance

    {

        get

        {

             if (instance==null)

            {

            lock (padlock)

            {

                if (instance==null)

                {

                    instance = new Singleton();

                }

                return instance;

            }

         }

        }

    }

}

线程不是每次都加锁,只有判断对象实例没有被创建时它才加锁。这种实现方式用的较少。

注意事项:

不要实现ICloneable接口或者继承自其相关的子类,也不要支持序列化。否则客户程序可以跳过已经隐蔽起来的类构造函数,导致私有的Singleton() { } 部分的实效。

 

 

参考资料:

TerryLee's Tech Space

吕震宇博客

Erich Gamma《设计模式可复用面向对象软件的基础》

 

Dify搭建AI测试用例生成器 1、获取产品需求文档2、解读、分析、挖掘需求点,提炼为测试点3、依据测试点,生成详细的测试用例4、输出测试用例1、打开 Dify 控制台,依次点击【工作室】-【ChatFlow】-【创建空白应用】。 阅读详情

相关推荐

DAC60501与STM32的I2C通信实战:从寄存器配置到电压输出

本文详细介绍了如何使用STM32通过I2C通信驱动DAC60501数模转换器,实现精确的模拟电压输出。内容涵盖从硬件连接到软件模拟I2C驱动编写,再到DAC寄存器配置与电压计算的全流程实战指南,并提供了关键的驱动实例代码和常见问题调试技巧,帮助开发者快速掌握这一嵌入式开发中的实用技能。

weixin_29197835的博客 365

c# 锁的使用

1 互斥锁lock(基于Monitor实现) 定义: private static readonly object Lock = new object(); 使用: lock (Lock) {   //todo } 作用:将会锁住代码块的内容,并阻止其他线程进入该代码块,直到该代码块运行完成,释放该锁。 注...

weixin_34092455的博客 3040

stm32H743IIT6 cubemx HAL USB UVC摄像头基础

stm32性能已经很强了, 可以驱动ov5640摄像头, 所以可以把摄像头接在stm32上, 当作一个摄像头驱动器, 连接到电脑上 开发环境: stm32cubemx 6.0.1 单片机: 自己做的stm32h743iit6核心板,兼容正点原子 学习资料: 圈圈学USB 鱼鹰谈单片机 从零开始学习USBhttps://to-run-away.blog.youkuaiyun.com/article/details/85038393 整个项目是基于CDC串口上修改 1 stm32 USB 代码概览 ..

紫枫洛天的博客 7749

C#中单例模式---转载

转载地址: http://www.cnblogs.com/cpetcoandy/archive/2011/11/10/2244407.html 单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。   一、经典模式: publicclass Singleton { privatestatic Singleton ...

weixin_34315189的博客 129

论文、报告中那些乱七八糟的图(甘特图、卡吉图,桑基图,小提琴图,弦图,螺旋图,风玫瑰图)

在一些论文或报告中,总是会看到一些熟悉的图,但作者总是不能好好说话,非得搞个洋名字、缩写字或者半洋半中的词来显示它多么高大上,有时候这种故弄玄虚、华而不实的写法也实在是让人看了不伦不类,图首先是让读者更容易看懂的,不是让你来故作高深、玩玄学的。

David_jiang 9426

Vue3 + EventSource 实战:手把手教你打造实时AI聊天悬浮窗(附完整代码)

本文详细介绍了如何使用Vue3和EventSource技术构建一个实时AI聊天悬浮窗。文章从产品化视角出发,重点讲解了流式数据接收与渲染、悬浮窗UI交互的工程化实现、性能优化及高级功能,并提供了完整的代码示例,帮助开发者快速集成功能完整的AI问答系统。

assembly8low的博客 843

学习笔记(13)---Lock简单使用

上一篇中,把线程声明在内部就不会有丢失现象,还可以用lock锁,锁住线程,这样也能不会出现数据丢失。 声明锁 private static readonly object LockThread = new object(); private 避免外部锁定,static 唯一的---Lock(this),readonly 避免引用被改动,object 必须引用类lock要尽量减小作用的...

qq_44484973的博客 456

汽车电子开发必看:AUTOSAR MCAL层SPI驱动配置全解析(基于EB tresos)

本文深入解析了AUTOSAR MCAL层SPI驱动的核心配置,基于EB tresos工具详细阐述了通道、外部设备、作业与序列等关键概念。重点剖析了多设备共享总线时的资源管理与实时性调优策略,特别是SpiJobPriority参数的决定性影响,并提供了常见配置陷阱的实战排查指南,旨在帮助汽车电子工程师高效完成SPI驱动配置。

weixin_29188043的博客 292

c#中多线程同步Lock(锁)的研究以及跨线程UI的操作

本文只针对C#中,多线程同步所用到的锁(lock)作为研究对象。由于想更直观的显示结果,所以,在做demo的时候,就把多线程通过事件操作UI的代码也写了出来,留作备忘和分享吧。 其实多线程的同步,使用同步锁的方法用了好多次,今天无意中看到MSDN中,建议用: 1 private static readonly object locker1 = new object(); 2 pri...

weixin_30918415的博客 387

NSIS教程(8): 基于第三方界面库的安装包界面

前面的几篇文章介绍了NSIS的传统界面的安装包和现代界面的安装包的制作方法,也提到了NSIS支持自定义页面(即使用page custom)的特性,自定义页面需要用户自己创建对话框、控件、添加控件响应等等,虽然NSIS提供了nsDialogs.nsh来支持这些功能,但使用起来还是不太方便(需要专门了解这个插件诸多用法),而且不够灵活,所以本文介绍一种终极的自定义界面的安装包解决方案,即完全使用第三方

while(1) { smile(); } 9万+

【TCAD】AlGaN 器件的Sentaurus仿真

否则,必须在 LatticeParameters Sentaurus Device 的参数文件中的部分。Sentaurus Device 有两个工具实例:第一个工具实例, sd_fdiv ,模拟正向偏置特性,第二个工具实例, sd_rviv ,模拟反向偏置特性直至击穿。对于牛顿求解器,通常应该将非线性迭代次数限制为一个足够小的值,例如 Iterations=20 ,同时通过指定非阻尼迭代次数高于允许的牛顿迭代次数来避免解的阻尼( NotDamped=30 )。晶胞中的 Ga-N 键为橙色。

荷塘阅色 1213

设计模式—单例模式

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点目的使类的一个对象成为系统中的唯一实例。从客户端对其进行实例化。需要一种只允许生成对象类的唯一实例的机制。“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯...

LM 265

掌握C++新特性中智能指针的综合指南

本文是一篇关于C++中智能指针的综合指南,旨在深入探讨现代内存管理的核心概念和技术。智能指针是C++中一种强大的工具,可以帮助开发人员更安全、高效地管理内存资源。通过详细解析各种类型的智能指针,包括unique_ptr、shared_ptr和weak_ptr,读者将了解它们的原理、用法和适用场景。本文将重点介绍智能指针的优势,如自动内存释放、避免内存泄漏和循环引用等问题。此外,还将讨论智能指针与传统指针的区别,并提供一些最佳实践和实用技巧,帮助读者在实际项目中正确、高效地使用智能指针。

Lion_Long的博客 1200

设计模式学习笔记之——单件模式

单件模式的关键是确保只有一个实例。 (1)经典单件模式(又称懒汉模式):public class Singleton { public static Singleton uniqueSingleton; private Singleton() { } public static Singleton getInstance(){ if (uniqueSin

woyaoxuejavaya的博客 571

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《Head First 设计模式》学习笔记——单件模式

设计模式 单件模式:确保一个类只有一个实例,并提供一个全局访问点。 要点 单件模式确保程序中一个类最多只有一个实例。 在Java中实现单件模式需要私有的构造器、一个静态方法、一个静态变量。 确定在性能和资源上的限制,然后小心翼翼的选择适当的方案来实现单件,以解决多线程问题。 全局变量缺点 如果将对象赋值给一个全局变量,那么必须在程序一开始就创建好对象。万一对象非常耗费

1056

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HeadFirst设计模式学习笔记3-单件模式

原创文章,如有转载,请注明出处: http://blog.youkuaiyun.com/neomc/article/details/6787876 单件模式时管理互斥/共享/临界资源的不错方式。可以保证系统所用的全局资源只有一份。 单件模式的定义:确保一个类只有一个实例,并且提供一个全局访问点。 单件模式的优点: 1. 可以延迟实例化。类只有在被真正使用时才会被实例化,避免了如全局变量那

NeoMc的技术博 1846

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式学习笔记——单件模式

对象性能模式介绍 面向对象可以较好的解决抽象问题,但是面向抽象相比于面向过程会有额外的开销,虽然这种开销在大多数情况下都可以忽略不计。但是在某些情况下,面向对象造成的开销必须谨慎处理。23种设计模式种关于对象性能的设计模式有Singlton模式和Flyweight模式。 单件模式(Singlton) 使用场景 在程序中,有一些类只能有一个实例才能保证逻辑的正确性以及良好的效率,比如说数据库类,只能存在一个正在连接的实例,如果存在多个正在连接的实例则会导致数据库连接异常。或者在w...

qq_41871270的博客 296

【设计模式学习笔记】Singleton单件模式

单件模式的核心思想相当简单,即构建唯一的实例。 public class Singleton { private volatile static Singleton m_Instance; private Singleton()

Roger的学习笔记 469

设计模式学习笔记(十四:单件模式)

1.1概述 保证一个类仅有一个实例,并提供一个访问它的全局访问点。这就是单件模式的定义。 在某些情况下,我们可能需要某个类只能创建一个对象,即不让用户用该类实例化出多于两个的实例。 例如,在一个公文管理系统中,公文类的实例“公文文件”,需要将公章类的实例作为自己的一个成员,以表明自己是一个有效的公文文件,那么系统的设计者就需要保证公章类只有一个实例,不能允许用户使用公章类...

weixin_30381317的博客 140

java设计模式单件模式_转:设计模式学习笔记(二)——Singleton单件模式

这是我写模式设计的第二篇,首先来说说设计模式的分类。基本的23种设计模式从目的上可分为三种:1、创建型(Creational)模式:负责对象创建。2、结构型(Structural)模式:处理类与对象间的组合,可以解决一些继承依赖性的问题3、行为型(Behavioral)模式:类与对象交互中的职责分配,可以解决组件间如何和交互,隔离变化。下面来说说单件模式:首先说说单件模式产生的动机,也就是为什么会...

weixin_42164931的博客 178

设计模式学习笔记(8):单件模式

       单件模式:确保一个类只有一个实例,并提供一个全局访问点。       这听上去和全局变量有点相似。但是在用法上会存在很大不同,全局变量基本上就是对对象的静态引用。       涉及到有些JVM的实现,在运行时,全局变量都会占用资源,如果这个全局变量非常消耗资源,但在这次执行的过程中又没用上它,这就会造成资源的巨大浪费,所以我们就要使用单件模式了。      PS:在java1.2版本...

滴滴哒滴滴的博客 203

【设计模式】学习笔记7:单件模式(Singleton)

走进单件模式 有些对象我们只需要一个,比如:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机,显卡等设备的驱动程序对象等。 这些类的对象只能有一个实例,如果有多个,然而会导致许多问题产生。 有人可能觉得,这只要用全局变量或者静态变量就可以做到了 这样做的缺点: 必须程序一开始就创建对象,但是有些对象可能用不到,耗费资源。而单件模式在需要时才创建

D_Double's Journey 2723

设计模式学习笔记(二)——Singleton单件模式

基本的23种设计模式从目的上可分为三种:1、 创建型(Creational)模式:负责对象创建。2、 结构型(Structural)模式:处理类与对象间的组合,可以解决一些继承依赖性的问题3、 行为型(Behavioral)模式:类与对象交互中的职责分配,可以解决组件间如何和交互,隔离变化。下面来说说单件模式:首先说说单件模式产生的动机,也就是为什么会出现单件模式。有一些类在系

358

单件模式

单件模式(singleton)经典案例延迟实例化要点定义单件模式三元素类图关于线程安全处理多线程问题要点 关于如何创建一个独一无二的实例对象 经典案例 // 这种方式是非线程安全的 public class Singleton { // 静态:确保该类只有一个单例对象 private static Singleton uniqueInstance; // 私有的:确保外部类不能调用该构造函数 private Singleton() {} // 延迟实例化 public static Sing

weixin_43381785的博客 276
上一篇: 抽象类和接口
下一篇: 设计模式学习笔记之工厂模式
小新娜不怕
博客等级 码龄18年 23粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值