C# 设计模式之单例模式归纳总结

下面我将为你详细介绍“C# 设计模式之单例模式归纳总结”的攻略。

什么是单例模式?

单例模式是指保证一个类只有一个实例,并提供一个访问类唯一实例的全局访问点。

单例模式的优缺点

优点

  1. 提供唯一实例,避免了重复创建,节省了系统资源。
  2. 可以控制实例化的数量,减小系统与外界的耦合程度。
  3. 提供了全局访问点,方便对唯一实例的访问。

缺点

  1. 单例类的职责过重,一旦修改可能会对整个系统造成影响。
  2. 不易扩展,因为单例模式只能产生一个实例,所以其适用范围受到一定的限制。

单例模式的实现

饿汉式单例模式

饿汉式单例模式在类被实例化的时候就已经创建好了唯一的实例,所以又被称为静态单例模式。

示例代码:

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

    private Singleton() {}

    public static Singleton GetInstance()
    {
        return instance;
    }
}

懒汉式单例模式

懒汉式单例模式在类被第一次引用的时候才会创建唯一实例,所以又被称为动态单例模式。

示例代码:

public class Singleton
{
    private static Singleton instance = null;

    private Singleton() {}

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

线程安全的懒汉式单例模式

在懒汉式单例模式中,如果有多个线程同时访问,就可能导致创建多个实例的情况,这样就不再保证单例的唯一性了。为了解决这个问题,可以使用锁机制,来保证线程安全。

示例代码:

public class Singleton
{
    private static Singleton instance = null;
    private static readonly object syncLock = new object();    //锁对象

    private Singleton() {}

    public static Singleton GetInstance()
    {
        lock(syncLock)
        {
            if(instance == null)
            {
                instance = new Singleton();
            }
        }
        return instance;
    }
}

总结

单例模式是开发中比较常用的设计模式之一,通过保证一个类只有一个实例,能够简化对象的管理,提高系统的性能。在实现单例模式时可以采用静态单例、动态单例和线程安全的懒汉单例等不同的方式,选择适合的方式应该根据实际的需求来决定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 设计模式之单例模式归纳总结 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 关于.NET6 Minimal API的使用方式详解

    关于 .NET 6 Minimal API 的使用方式详解 什么是 .NET 6 Minimal API .NET 6 Minimal API 是 .NET 6 新增的一个轻量级 Web API 框架,它旨在提供一种更简单、更轻量级的开发方式,用于快速搭建 Web API 服务。相对于传统的 ASP.NET Core Web API,它更加易于学习、更加灵活…

    C# 2023年6月3日
    00
  • 基于使用BeginInvoke,EndInvoke异步调用委托的实现代码

    在讨论 “基于使用BeginInvoke,EndInvoke异步调用委托的实现代码” 之前,我们需要先了解一下委托的概念。 委托的概念 委托(Delegate)是 .NET Framework 的一项非常重要的特性,他是一个类型,可以看成是函数指针,但比函数指针更复杂。 委托类型可以看成是具有一个或多个参数的方法的引用。当需要使用事件或线程调用方法时,委托可…

    C# 2023年6月6日
    00
  • C#实现备忘录功能

    当我们开发一个应用程序时,常常需要向用户提供一种保存信息的功能,以便用户在需要的时候能够找到并使用这些信息。这种保存用户信息的功能就称为备忘录。在C#中,我们可以很容易地实现备忘录的功能,并且可以根据自己的需求来创建不同形式的备忘录。下面是实现备忘录功能的完整攻略: 1. 创建备忘录的类和属性 我们需要创建一个备忘录的类来存储用户信息,并定义备忘录中的属性。…

    C# 2023年5月15日
    00
  • C# TextReader.ReadToEnd – 读取所有字符

    TextReader.ReadToEnd方法是一个用于读取文本中从当前位置到末尾的所有字符的方法。它返回的是一个字符串,包括在当前位置到文件末尾的所有字符。如果已经到了文本的末尾,那么.ReadToEnd()就会返回一个空字符串。这个方法在数据读取中非常常见,特别是在读取小文件时非常方便。下面是更详细的使用方法: 语法 public virtual stri…

    C# 2023年4月19日
    00
  • C#读取数据库返回泛型集合详解(DataSetToList)

    C#读取数据库返回泛型集合是一种常见的数据访问方式,可以快速、高效地将数据库里的数据以泛型集合的方式返回给程序,本文将详细讲解如何使用DataSetToList实现这一功能。 准备工作 在使用DataSetToList读取数据库前,需要进行一些准备工作,具体如下: 1.引用相关命名空间 在代码文件中,需要引用以下命名空间: using System.Data…

    C# 2023年5月31日
    00
  • 如何在C#项目中链接一个文件夹下的所有文件详解

    当我们需要在C#项目中链接一个文件夹下的所有文件时,可以通过以下方式实现: 在 Visual Studio 中创建 C# 项目。选择 “File” > “New” > “Project”,然后选择 “Visual C#” > “Windows” > “Console Application”。 在项目中添加文件夹。右键项目,选择 “A…

    C# 2023年6月1日
    00
  • PowerShell中使用ArrayList实现数组插入、删除、添加例子

    下面是使用ArrayList实现数组插入、删除、添加的完整攻略。 什么是ArrayList ArrayList是一种集合(System.Collections.ArrayList),它能够动态地添加和删除元素,并在内部处理数组元素的大小和位置。使用ArrayList 可以避免数组的开始初始化大小并手动调整大小的问题。 如何使用ArrayList 在 Powe…

    C# 2023年6月7日
    00
  • ASP.NET实现基于Forms认证的WebService应用实例

    实现基于Forms认证的WebService应用需要以下几个步骤: 在web.config文件中配置Forms认证和WebService 首先要在web.config文件中配置Forms认证和WebService。示例代码如下: <configuration> <system.web> <authentication mode=…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部