Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#设计模式01——单例模式的三种写法

C#设计模式01——单例模式的三种写法

作者头像
明志德道
发布于 2023-10-21 10:27:32
发布于 2023-10-21 10:27:32
78801
代码可运行
举报
运行总次数:1
代码可运行

第一种

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //在方法里new  ,这里使用 双if-lock
    public  class SingleFirst
    {
        private static SingleFirst _SingleFirst;
        private static readonly object _Single_Lock = new object();
        private SingleFirst() { }
        public static SingleFirst GetInstance()
        {
            if(_SingleFirst == null)
            {
                lock (_Single_Lock)
                {
                    if(_SingleFirst == null)
                    {
                        _SingleFirst = new SingleFirst();
                    }
                }
            }
            return _SingleFirst;
        }
        
    }

第二种

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <summary>
    /// 在构造函数里new(), 在方法返回
    /// </summary>
    public class SingleSecond
    {
        private static SingleSecond _SingleSecond = null;
        private SingleSecond() { }
        static SingleSecond()
        {
            _SingleSecond = new SingleSecond();
          
        }
        public  static  SingleSecond GetInstance()
        {
            return _SingleSecond;
        }
    }

第三种

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <summary>
    /// 在静态字段里new(),方法里返回
    /// </summary>
    public class SingleThrid
    {
        private static SingleThrid _SingleThird = new SingleThrid();
        private SingleThrid() { }
        public static SingleThrid GetInstance()
        {
            return _SingleThird;
        }
    }

运行测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                var a1 = SingleFirst.GetInstance();
                var a2 = SingleFirst.GetInstance();
                Console.WriteLine($"a1 和 a2 是同一实例:{ object.ReferenceEquals(a1, a2)}");
                ;
                var b1 = SingleSecond.GetInstance();
                var b2 = SingleSecond.GetInstance();
                Console.WriteLine($"b1 和 b2 是同一实例:{ object.ReferenceEquals(a1, a2)}");
                var c1 = SingleThrid.GetInstance();
                var c2 = SingleThrid.GetInstance();
                Console.WriteLine($"c1 和 c2 是同一实例:{ object.ReferenceEquals(a1, a2)}");

源码下载:https://gitee.com/weilong2020/csharp_23_-design-patterns.git

什么是C#单例模式?

C#单例模式是一种创建对象的设计模式,它保证一个类只有一个实例,而且它很容易被访问。在C#中,可以使用静态变量来实现单例模式,同时使用私有构造函数和公共静态方法来保证单例模式的实现。

为什么要使用C#单例模式?

C#单例模式在许多场合下是非常有用的,它可以确保一个对象实例只被创建一次,并且在整个应用程序中只有一个实例存在,这种方式可以减少资源的浪费,提高系统的性能,同时可以更方便的管理和调用实例。

单例模式应用的场景有哪些? 

单例模式可以应用于许多场合,如:

- 常用的应用场景是数据库连接的实例,因为一个系统中只需要一个数据库连接实例即可 - 系统的配置信息类,因为系统的配置信息只有一份,并且需要被全局使用 - 日志记录类,因为日志记录需要记录整个系统的运行情况,它应该被全局共享 - 缓存管理类,因为缓存数据只有一份,需要被全局共享

单例模式有哪些实现方式?

单例模式有多种实现方式,如:

- 饿汉式 - 懒汉式 - 线程安全的懒汉式 - 双重锁定 - 静态初始化

每种实现方式都有其优缺点,可以根据具体的需求来选择合适的实现方式。

如何实现一个C#单例模式?

以下是一个使用静态变量实现的C#单例模式示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Singleton
{
    private static Singleton instance;

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}

该示例中,我们使用一个私有的构造函数和一个静态变量来创建一个单例实例,然后使用一个公共的静态方法返回该实例。当第一次访问 `Instance` 属性时,会创建一个新的 `Singleton` 实例,在随后的调用中返回相同的实例。

同时,我们也可以使用线程安全的懒汉式示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Singleton
{
    private static readonly object lockObject = new object();
    private static Singleton instance;

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                lock (lockObject)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
}

这种实现方式会把 `Instance` 属性的实现放到一个双重锁定的块中,确保只有在第一次创建实例时才会进入锁定块。这种方式可以更好地保证线程安全。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LLM4Rec:当推荐系统遇到大语言模型
大模型LLM在越来越多的领域开始崭露头角,前段时间我们整理了大模型在推荐系统中的应用 survey,当时留了一些坑没填上,今天补上。
NewBeeNLP
2024/01/17
3.5K0
LLM4Rec:当推荐系统遇到大语言模型
AI论文速读 | 2024[SIGIR] LLM4POI:基于大语言模型的下一个兴趣点(POI)推荐
论文标题:Large Language Models for Next Point-of-Interest Recommendation
时空探索之旅
2024/11/19
4080
AI论文速读 | 2024[SIGIR] LLM4POI:基于大语言模型的下一个兴趣点(POI)推荐
从ID-based到LLM-based: 可迁移推荐系统研究进展总结
TLDR: 本文综述了近期关于可迁移推荐系统的发展现状,并分别介绍了基于ID、基于模态和基于大语言模型的可迁移推荐系统的代表性工作,最后对该方向进行了系统性的总结和展望。
张小磊
2023/11/07
1.2K0
从ID-based到LLM-based: 可迁移推荐系统研究进展总结
SIGIR 2023 | 推荐系统何去何从,经典ID范式要被颠覆?
机器之心专栏 机器之心编辑部 本文调查了一个富有潜力的问题,即多模态推荐系统MoRec 是否有望终结 IDRec 在推荐系统领域长达10年的主导地位,基于此,论文进行了深入研究。相关成果已被 SIGIR 2023 接收。 链接: https://arxiv.org/abs/2303.13835 代码: https://github.com/westlake-repl/IDvs.MoRec 研究背景  [纯 ID 推荐系统 vs 纯模态推荐系统]  自矩阵分解问世以来,使用 ID embedding 来建模
机器之心
2023/05/31
6480
SIGIR 2023 | 推荐系统何去何从,经典ID范式要被颠覆?
LEARN: LLM在快手电商广告推荐场景的应用
今天继续分享一篇大模型在推荐系统中的落地应用工作,是快手今年5月份发表的论文《Knowledge Adaptation from Large Language Model to Recommendation for Practical Industrial Application》。
NewBeeNLP
2024/06/27
1.3K0
LEARN: LLM在快手电商广告推荐场景的应用
KDD'23 | 大厂推荐系统如何提升两阶段建模一致性
今天介绍两篇大厂推荐系统中提升两阶段建模一致性的文章,都是今年KDD'23上录用的论文。第一篇文章是快手发表的工作,对超长用户历史行为序列建模中,两阶段的用户行为筛选目标不一致问题进行优化,让第一阶段产出的用户行为有更高的比例在第二阶段打高分。第二篇文章是美团发表的工作,对两阶段重排建模进行优化,让第一阶段筛选出的重排组合有更高的比例成为第二阶段的高分结果。
圆圆的算法笔记
2023/08/17
1.2K0
KDD'23 | 大厂推荐系统如何提升两阶段建模一致性
NoteLLM: 大语言模型在小红书推荐系统的落地应用
今天分享一篇小红书今年3月的论文,介绍了大语言模型在小红书笔记推荐场景下的落地应用,主要是围绕如何利用LLM的表征能力来生成更适用于i2i召回的文本embedding,思路简单,落地也容易,个人觉得实践价值非常高,值得学习。
NewBeeNLP
2024/06/04
3K0
NoteLLM: 大语言模型在小红书推荐系统的落地应用
生成式推荐系统初探
随着 ChatGPT 的横空出世与 GPT-4 的重磅登场,生成式 AI(Generative AI)引起了前所未有的关注,基于 GPT(Generative Pre-Trained Transformer)的模型在各类 NLP 和 CV 任务上取得了惊人的效果。生成式 AI 模型可以根据训练过的数据创建新的内容、模式或解决方案,一些典型应用包括 ChatGPT、Stable Diffusion 和 DALL·E 等(封面图片来自 DALL·E)。然而,在推荐系统(RS)领域研究中,受限于推荐系统 User/Item ID 的范式,以及大多情况下为非通用、非常识知识,因而直接将基于 GPT 的模型作为推荐模型具有一定的局限性。例如,在电影、图书和音乐等领域推荐场景直接将 ChatGPT 作为推荐模型可以取得较好的效果,然而,在其他一些领域推荐场景直接利用 ChatGPT 效果有限。随着各类生成式模型层出不穷,部分研究人员开始考虑如何在 RS 中有效引入生成式 AI。本文主要关注 RS 和生成式 AI 可能存在的结合点,调研了 RecSys'23 等会议录用的若干相关工作,以及最新已公开的若干方法。
腾讯技术工程官方号
2023/08/16
1.3K0
生成式推荐系统初探
推荐系统范式之争,LLM vs. ID?
TLDR: 本文与已有的LLM4Rec一个主要区别在于,已有的ChatGPT4Rec文献大多是调用OpenAI API来做prompt工程,本文则是将1750亿的GPT-3作为item encoder替换ID。为了对该范式(论文称之为TCF范式,在过去几年涌现了大量相关论文,不过多是使用BERT,word2vec等中小型item 编码器)性能进行极限研究和评价,论文甚至对600亿LLM做微调或者重新训练,目的是为了回答基于文本的推荐范式的若干核心问题,相关实验可以看出完成该论文的算力成本之高。
张小磊
2023/08/22
7010
推荐系统范式之争,LLM vs. ID?
当推荐系统遇到大模型
本文整理了2023年以来,ChatGPT等语言大模型在推荐系统中的应用。基于大模型的推荐系统,与传统的推荐系统差异非常大,如果大模型推荐系统能取得成功,势必会对原来的推荐系统造成不小的冲击。截止到目前为止,已经有多篇文章初步探讨和尝试了ChatGPT等大模型在推荐系统中的应用。总体来看,ChatGPT在推荐系统中的应用有不小的潜力,主要体现在以下几个方面:
圆圆的算法笔记
2023/08/17
3.1K0
当推荐系统遇到大模型
论文周报[0617-0623] | 推荐系统领域最新研究进展(19篇)
本文精选了上周(0617-0623)最新发布的19篇推荐系统相关论文,主要研究方向包括大模型强化学习提升推荐新颖度、异质贝叶斯网络音乐推荐、大模型类别引导的零样本推荐、推荐架构加速、利用图学习增强语言模型推荐系统、多语言新闻推荐、高效序列推荐、大模型增强的多场景推荐、大模型工作推荐、基于图的标签推荐、多模态扩散模型推荐、大模型新闻推荐、为大模型推荐蒸馏序列模式、将图卷积和对比学习统一到协同过滤框架、大模型增强的重排等。
张小磊
2024/07/05
1K0
论文周报[0617-0623] | 推荐系统领域最新研究进展(19篇)
ControlRec:对齐LLM和推荐系统之间的语义差异
标题:ControlRec: Bridging the Semantic Gap between Language Model and Personalized Recommendation 地址:https://arxiv.org/pdf/2311.16441.pdf 学校,公司:中国科学院大学,美团
秋枫学习笔记
2023/12/04
8750
ControlRec:对齐LLM和推荐系统之间的语义差异
阿里妈妈搜索广告2024大模型思考与实践
随着大模型时代的到来,搜推广模型是否具备新的进化空间?能否像深度学习时期那样迸发出旺盛的迭代生命力?带着这样的期待,阿里妈妈搜索广告在过去两年的持续探索中,逐步厘清了一些关键问题,成功落地了多个优化方向。如今,我们更加坚定地认为,搜推广模型与大模型的结合蕴藏着巨大的想象空间和业务价值。本文将从以下几个方面分享和交流 2024 年的思考与实践:
机器之心
2025/03/13
3610
阿里妈妈搜索广告2024大模型思考与实践
LLM Embedding对推荐系统落地应用讨论
随着ChatGPT横空出世,大模型的风算是吹遍了每一个领域,推荐系统作为老牌AI领域,也得沾沾光嘛~
Mirza Zhao
2024/12/24
9840
LLM Embedding对推荐系统落地应用讨论
论文周报[0610-0616] | 推荐系统领域最新研究进展(15篇)
本文精选了上周(0610-0616)最新发布的15篇推荐系统相关论文,主要研究方向包括基于语言模型推荐的偏好优化、基于蒸馏的多样性推荐、图协同过滤推荐、为序列推荐设计自定义轻量化、利用分布外词汇提高大模型推荐能力、多媒体推荐、图提示微调用于流式推荐、图社交推荐、缓解视频推荐中的时长偏差、面向推荐的俄罗斯套娃表示学习、基于基础模型的联邦推荐综述、基于弹性资源分配的推荐模型、两阶段大模型序列推荐等。
张小磊
2024/06/18
1.1K0
论文周报[0610-0616] | 推荐系统领域最新研究进展(15篇)
IJCAI'22 推荐系统论文梳理
https://ijcai-22.org/main-track-accepted-papers/
枫桦
2022/08/02
8960
谷歌出品 | TIGER:生成式检索推荐系统
这篇文章提出了一种新的生成式检索推荐系统的范式TIGER。当前基于大规模检索模型的现代推荐系统,一般由两个阶段的流程实现:训练双编码器模型得到在同一空间中query和候选item的embedding,然后通过ANN搜索来检索出给定query的embedding的最优候选集。相比于当前主流的推荐系统,本文提出了一种新的单阶段范式:一种生成式检索模型。
Houye
2023/12/28
2.4K0
谷歌出品 | TIGER:生成式检索推荐系统
LEARN:百川大模型在快手推荐中的应用
这一两年推荐的论文工作离不开冷启和长尾问题,就像过去几年离不开序列和多目标一样,所套的壳子也从时序模型发展到对比学习和LLM,更像是“问题长期存在,我们现在有了更好的工具解决”,鸡生蛋与蛋生鸡总是这么的迷人和无所遁形。
NewBeeNLP
2024/07/12
9620
LEARN:百川大模型在快手推荐中的应用
BinLLM:让LLM理解用户-商品协同信息的编码方式
LLMRec如何集成用户-item的交互信息?常见的方式是从头训练LLM或者从其他模型来映射协作信息。但这些方法无法以类似文本的格式表示信息,这可能无法与LLM最佳对齐。本文提出BinLLM,通过类似文本的编码无缝集成协作信息。BinLLM将来自外部模型的协作emb转换为二进制序列——一种LLM可以直接理解和操作的特定文本格式,有助于LLM直接使用类似文本格式的协作信息。同时,BinLLM可以使用点小数表示法压缩二进制序列,以避免过长的长度。
秋枫学习笔记
2024/06/18
1870
BinLLM:让LLM理解用户-商品协同信息的编码方式
When RS Meets LLM:推荐系统如何从大语言模型中取长补短?面向应用视角的全面综述
Github: https://github.com/CHIANGEL/Awesome-LLM-for-RecSys
Houye
2023/09/04
1.2K0
When RS Meets LLM:推荐系统如何从大语言模型中取长补短?面向应用视角的全面综述
推荐阅读
相关推荐
LLM4Rec:当推荐系统遇到大语言模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验