设计模式-单例模式

单例模式:即一个类全局只有一个实例,而且自行实例化冰箱整个系统提供这个实例。

根据创建的时机可以分为饿汉式和懒汉式

懒汉式是在第一个调用这个实例时创建,饿汉式是该类在加载时立刻进行实例化

懒汉式泛型单例

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ISingleton<T> where T : class, new()
{
    private static T instance = null;

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

}

饿汉式泛型单例

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ISingleton<T> where T : class, new()
{
    private static T instance = new T();

    public static T Instance
    {
        get
        {
            return instance;
        }
    }

}

具体单例

cs 复制代码
class A : ISingleton<A>
{

}

缺点:

1.生命周期不可控

很多时候我们的单例是只有访问时才会加载的,属于懒汉式,这个单例的生命什么时候结束脱离了GC的掌控,只能靠我们自己去释放,如果忘记释放或者提前被释放容易产生各种问题,(其他开发者不知道你什么时候释放单例,所以就无法释放)

2.作用域过广

我们在全局都能通过静态访问单例,容易让用户误操作,而且让代码散乱不安全,如果有100个单例...这都是什么

3.单一职责过于复杂

使用单例可能会让一个类复杂多种职责,容易让单一文件过大,代码复杂性上升,一个GameManager统计分数还计时,还存玩家信息,又存地图信息...改起来亚历山大

相关推荐
武藤一雄1 小时前
C# 设计模式大全(第一弹|7种)
microsoft·设计模式·微软·c#·.net·.netcore
Aloha_up3 小时前
常见设计模式简介
设计模式
砍光二叉树4 小时前
【设计模式】行为型-迭代器模式
设计模式·迭代器模式
Elaine3365 小时前
【Agent 设计模式全景图:从 ReAct 到工业级多智能体架构】
设计模式·llm·软件架构·ai agent
han_6 小时前
JavaScript设计模式(六):职责链模式实现与应用
前端·javascript·设计模式
无籽西瓜a7 小时前
【西瓜带你学设计模式 | 第三期-工厂方法模式】工厂方法模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·设计模式·工厂方法模式
无籽西瓜a7 小时前
【西瓜带你学设计模式 | 第四期 - 抽象工厂模式】抽象工厂模式 —— 定义、核心结构、实战示例、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·抽象工厂模式
￰meteor9 小时前
23种设计模式 -【抽象工厂】
后端·设计模式
程序员小寒9 小时前
JavaScript设计模式(五):装饰者模式实现与应用
前端·javascript·设计模式
workflower1 天前
设计模式的分类
设计模式·集成测试·软件工程·软件构建·软件需求·结对编程