【超详细】C#的单例模式

目录

C#的单例模式

1.什么是单例模式?

2.为什么要使用单例模式?好处是什么?

3.单例模式的核心原理

4.两种单例模式

4.1.不继承MonoBehaviour的泛型单例(普通类单例)

4.2.基于MonoBehaviour的泛型单例(Unity组件单例)

5.两种单例模式的使用场景与实例

5.1.不继承MonoBehaviour的单例(普通类单例)

5.2.基于MonoBehaviour的单例(Unity组件单例)

6.使用单例模式的注意事项

6.1.普通类单例(Singleton<T> )注意事项

6.2.Unity组件单例(MonoSingleton<T> )注意事项

6.3.通用注意事项

7.总结


       本篇文章分享一下C#的单例模式。

C#的单例模式

1.什么是单例模式?

       单例模式(SingletonPattern)是创建型设计模式的一种,核心目标是确保一个类在整个应用程序生命周期中只存在一个实例,并提供一个全局唯一的访问入口(通常是Instance静态属性)。它解决了“频繁创建/销毁对象导致的资源浪费”和“多实例数据不一致”的问题,针对需要全局唯一实例来统一管理的逻辑。

2.为什么要使用单例模式?好处是什么?

       单例模式的核心价值在于“唯一性”和“全局可访问性”,具体好处如下:

(1)节省资源:避免频繁创建销毁重量级对象(如数据库连接、配置加载类),减少内存占用和性能开销。

(2)数据一致性:全局唯一实例确保所有模块访问的是同一份数据,避免多实例导致的数据冲突。

(3)简化访问:无需手动传递实例(如通过构造函数注入),通过Instance静态属性即可全局访问,降低代码耦合。

(4)生命周期可控:可统一管理实例的创建、初始化和销毁(如程序退出时释放资源)。

3.单例模式的核心原理

       单例模式的实现依赖以下3个核心逻辑,缺一不可:

(1)私有构造函数:禁止外部通过new关键字创建实例(破坏唯一性),仅允许类内部创建。

(2)静态私有实例:用static关键字存储唯一实例(静态成员属于类,而非对象,确保全局唯一)。

(3)静态公共访问入口:通过static Instance属性提供全局访问,内部控制实例的创建逻辑。

4.两种单例模式

4.1.不继承MonoBehaviour的泛型单例(普通类单例)

       适用于非Unity组件类,不依赖Unity生命周期,纯C#逻辑实现。

using System;
using System.Reflection;
using UnityEngine;

///<summary>
///不继承 MonoBehaviour 的泛型单例模式 
///</summary>
///<typeparam name="T">泛型参数,必须是当前类的子类(约束:where T : Singleton<T>)</typeparam>
public class Singleton<T> where T : Singleton<T>
{
    //1.静态私有实例:存储 T 类型的唯一实例,初始为 null(懒加载)
    //static:确保实例属于类,全局唯一;private:禁止外部直接修改
    private static T instance;
    //2.静态私有锁对象:用于多线程同步,防止并发创建多个实例
    //readonly:确保锁对象不会被修改,避免锁失效;static:与实例共享同一把锁
    private static readonly object lockObject = new object();
    //3.静态公共访问入口:全局唯一获取实例的方式
    public static T Instance
    {
        get
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值