Singleton 单例模式简介与 C# 示例【创建型】【设计模式来了】

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

 〇、简介

1、什么是单例模式?

一句话解释:

  单一的类,只能自己来创建唯一的一个对象。

单例模式(Singleton Pattern)是日常开发中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有一个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象

官方意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

 一个比喻:(班主任与学生)

  比如一个班级,只有一个班主任,任何一个同学要找班主任,都是找的同一个,班主任忙的时候,当然就出现排队的情况。

2、优缺点和使用场景

  • 优点:内存里只有一个实例,减少了内存的开销,也避免了对象高频创建带来的性能损耗。
  • 缺点:任务量大时,会出现排队,耗时增加。另外与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

 使用场景举例:

  • 要求生产唯一序列号。
  • WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
  • 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

一、单例模式简单实现

public class Singleton
{
    private static Singleton instance = null;
    private static object lockObject = new object();
    /// <summary>
    /// 私有化构造函数,防止外部实例化
    /// </summary>
    private Singleton() { }
    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                lock (lockObject) // 线程同步锁
                {
                    if (instance == null) // Lazy Initialization
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    /// <summary>
    /// 重置 Singleton
    /// </summary>
    public void Reset()
    {
        instance = null;
    }
}

 测试代码:

static void Main(string[] args)
{
    var instance1 = Singleton.Instance;
    var instance2 = Singleton.Instance;
    Console.WriteLine(instance1 == instance2); // 输出 true 
}

二、带参数的单例模式实现

public class SingletonParameters
{
    private static SingletonParameters instance = null;
    private static object lockObject = new object();
    private int _firstvalue, _secondvalue;
    /// <summary>
    /// 私有化构造函数,防止外部实例化
    /// </summary>
    private SingletonParameters(int first, int second)
    {
        this._firstvalue = first;
        this._secondvalue = second;
    }
    public static SingletonParameters InstanceParameters(int first, int second)
    {
        if (instance == null)
        {
            lock (lockObject) // 线程同步锁
            {
                if (instance == null) // Lazy Initialization
                {
                    instance = new SingletonParameters(first, second);
                }
            }
        }
        else
        {
            instance.FirstValue = first;
            instance.SecondValue = second;
        }
        return instance;
    }
    public int FirstValue { get { return _firstvalue; } set { _firstvalue = value; } }
    public int SecondValue { get { return _secondvalue; } set { _secondvalue = value; } }
    /// <summary>
    /// 重置 Singleton
    /// </summary>
    public void Reset()
    {
        instance = null;
    }
}

 测试代码:

var instance1 = SingletonParameters.InstanceParameters(1, 2);
Console.WriteLine($"FirstValue:{instance1.FirstValue}");
Console.WriteLine($"SecondValue:{instance1.SecondValue}");
var instance2 = SingletonParameters.InstanceParameters(3, 4);
Console.WriteLine($"FirstValue:{instance2.FirstValue}");
Console.WriteLine($"SecondValue:{instance2.SecondValue}");
Console.WriteLine($"instance1 == instance2 : {instance1 == instance2}");

 Singleton 单例模式简介与 C# 示例【创建型】【设计模式来了】

参考:https://www.cnblogs.com/gaochundong/p/design_pattern_singleton.html

三、在 .NET 框架中的实际应用

下边是通过 object.GetType() 方法,获取对象的类型:

var test1 = new TestClass();
var test2 = new TestClass();
Type t1 = test1.GetType();
Type t2 = test2.GetType();
Console.WriteLine($"t1 == t2 : {t1 == t2}"); // t1 == t2 : True

根据以上示例,t1、t2 指向的是同一个对象,因此 object.GetType() 针对同一类型只生成一个 Type 对象。文章来源地址https://www.toymoban.com/news/detail-458885.html

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

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

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

相关文章

  • 设计模式-单例模式Singleton

    一个类只允许创建一个对象(或者实例),那这个类就是一个 单例类 1.表示全局唯一 如果有些数据在系统中 应该且只能保存一份 ,那就应该设计为单例类: 配置类:在系统中,我们只有一个配置文件,当配置文件被加载到内存之后,应该被映射为一个唯一的【配置实例】

    2024年02月10日
    浏览(38)
  • 设计模式四:单例模式(Singleton)

    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。 通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象

    2024年02月15日
    浏览(40)
  • java设计模式-单例模式(Singleton)

    单例模式(Singleton)就是一个类只能有一个实例,自行实例化,并向系统提供这一实例,这个类就是单例类。单例模式的特点: 一个类只能有一个实例; 单例类自己实例化; 单例类给其它对象提供这个单一实例。 资源管理类经常被设计为单例模式,例如管理属性文件的类。

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

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

    2024年02月13日
    浏览(29)
  • 大话设计模式——9.单例模式(Singleton Pattern)

    简介 确保一个类只有一个实例,并提供全局访问点来获取该实例,是最简单的设计模式。 UML图: 单例模式共有两种创建方式: 饿汉式(线程安全) 提前创建实例,好处在于该实例全局唯一,不存在线程冲突;坏处在于未使用时也会占用内存资源。 懒汉式(原生写法存在线

    2024年04月12日
    浏览(37)
  • 【Java基础教程】(十八)包及访问权限篇 · 下:Java编程中的权限控制修饰符、单例设计模式 (Singleton)和多例设计模式的综合探析~

    掌握Java 中的4种访问权限; 掌握Java 语言的命名规范; 掌握单例设计模式与多例设计模式的定义结构; 对于封装性,实际上之前只详细讲解了 private , 而封装性如果要想讲解完整,必须结合全部4种访问权限来看,这4种访问权限的定义如下表所示。 范围 private default protected

    2024年02月16日
    浏览(35)
  • C#设计模式之---单例模式

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

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

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

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

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

    2024年02月03日
    浏览(41)
  • [设计模式]创建型模式-单例模式

    单例模式是最简单的一种模式。在Go中,单例模式指的是全局只有一个实例,并且它负责创建自己的对象。单例模式有减少内存和系统资源开销、防止多个实例产生冲突等优点。 因为单例模式保证了实例的全局唯一性,并且只被初始化一次,所以比较适合全局共享一个实例,

    2024年02月19日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包