【C#】五种单例模式详解

这篇具有很好参考价值的文章主要介绍了【C#】五种单例模式详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单例模式有五种:

饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式。

1.饿汉式

public class SingleTon1 {
private static SingleTon1 instance = new SingleTon1();

private SingleTon1() {
}

public SingleTon1 getInstance(){
    return instance;
}

}
饿汉式,名字就能看出来,很饿,所以实例在初始化的时候就已经建好了。优点是没有线程安全的问题,缺点是浪费内存空间。

2.懒汉式(线程不安全的)

public class SingleTon2 {
private SingleTon2 instance;

private SingleTon2() {
}
public SingleTon2 getInstance(){
    if (instance == null){
        instance = new SingleTon2();
    }
    return instance;
}

}
懒汉式,顾名思义就是实例在用到的时候才去创建,用的时候才去检查有没有实例,如果有则返回,没有则新建。但是这种会产生线程不安全的情况,会有可能多个线程同时进入if语句判断都没有实例,从而实例化了两个,就不是单例了。

3.双检锁懒汉式(线程安全的)

public class SingleTon3 {
private SingleTon3 instance;

private SingleTon3() {
}

public SingleTon3 getInstance() {
    if (instance == null) {
        synchronized (SingleTon3.class) {
            if (instance == null) {
                instance = new SingleTon3();
            }
        }
    }
    return instance;
}

}

双检锁懒汉式,综合了懒汉式和饿汉式两者的优缺点整合而成。看上面代码实现中,特点是在synchronized关键字内外都加了一层 if 条件判断,只有在对象需要被使用时才创建,第一次判断 INSTANCE == null为了避免非必要加锁,当第一次加载时才对实例进行加锁再实例化这样既保证了线程安全,又比直接上锁提高了执行效率,还节省了内存空间。

4.静态内部类单例式

public class SingleTon4 {
private SingleTon4() {
}

private static class SingleTonInside {
    private static final SingleTon4 INSTANCE = new SingleTon4();
}

public static SingleTon4 getInstance() {
    return SingleTonInside.INSTANCE;
}

}
静态内部类,优点是:外部类加载时并不需要立即加载内部类,内部类不被加载则不去初始化INSTANCE,故而不占内存。这种方法不仅能确保线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化。

5.枚举单例式

public enum SingleTon5 {
INSTANCE;

public void method() {
    
}

}
枚举在java中与普通类一样,都能拥有字段与方法,而且枚举实例创建是线程安全的,在任何情况下,它都是一个单例。但是枚举类不能继承其他类了。从代码实现看,却更简洁清晰。并且它还自动支持序列化机制,绝对防止多次实例化。可以通过下面的方式调用。

SingleTon5.INSTANCE

总结:五种单例模式,最重要,最好的,用的最多的就是第三种双检锁懒汉式和第四种静态内部类式。面试常问,需能够手写这两种,并了解其余三种。如有错误,欢迎指出修改。
————————————————
版权声明:本文为CSDN博主「卡布达小新」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_56902337/article/details/117171364文章来源地址https://www.toymoban.com/news/detail-567773.html

到了这里,关于【C#】五种单例模式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kotlin的5种单例模式

    前言 最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨。主要单例模式实现如下: 饿汉式 懒汉式 线程安全的懒汉式 双重校验锁式 静态内部类式 PS:该篇文章不讨论单例模式的运用场景

    2024年02月01日
    浏览(34)
  • Unity的三种单例模式(饿汉,懒汉,MonoBehaviour)

    单例的使用场景 ​ 对象全局唯一,且经常被使用。 static静态字段介绍 所有对象共享static属性,即static属性在此类中是唯一的。 static属性不会被GC回收,随着程序开始而创建,随着程序结束而销毁(so 不要滥用单例哦) 学过面向对象的小伙伴对static想必都不陌生,其具有的特质

    2023年04月15日
    浏览(40)
  • c#中单例模式详解

    基础介绍:    确保一个类只有一个实例,并提供一个全局访问点。   适用于需要频繁实例化然后销毁的对象,创建对象消耗资源过多,但又经常用到的对象,频繁访问数据库或文件的对象。    其本质就是保证在 整个应用程序 的 生命周期 中, 任何一个时刻,单例类

    2024年02月06日
    浏览(43)
  • Python 实现单例模式的五种写法!

    单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类

    2024年02月10日
    浏览(46)
  • Java单例模式的五种实现方式 懒汉式 饿汉式 双重校验锁 静态变量 静态内部类 枚举实现单例模式等

    Java单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点以获取该实例。它通常用于需要共享资源或控制某些共享状态的情况下。 懒汉式:在类加载的时候就创建对象,要再调用方法时才创建对象,减少内存开销。 饿汉式:再类加载的时候就实例化对

    2024年04月27日
    浏览(33)
  • C#设计模式之---单例模式

    单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。 1)普通单例模式  2)懒汉式单例模式  3)饿汉式单例模式  或者  

    2024年02月14日
    浏览(42)
  • 单例模式【C#】

    只能生一个儿子。 文件操作只能一个单例去操作。 1static: static的特点是,不需要new就能使用。即使派生了,也是使用静态的对象。 静态方法,需要用类型去调用他。 2多线程:

    2024年02月05日
    浏览(33)
  • C#设计模式教程(4):单例模式

    单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个访问它的全局访问点。在C#中实现单例模式通常有几种不同的方法,这里介绍几种典型的实现方式。 1. 懒汉式(线程不安全)

    2024年01月19日
    浏览(41)
  • C#设计模式之单例模式

    单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式的结构图如下所示: 对一些类来说,只有一个实例是很重要的。如何才能保证一个类只有一个实例并且这个实例易于被访问呢? 基于程序员之间的约定或是利用全局变量吗? 虽然这样

    2024年02月03日
    浏览(48)
  • c#设计模式-创建型模式 之 单例模式

    目录 前言: 优点: 缺点: 饿汉式(静态变量方式) 懒汉式(线程不安全) 懒汉式(双重检查锁定) 推荐方式Lazy 总结: 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供 了一种访问其唯一的对象的方式,可以直接访问,

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包