C# 单例

作者: 合肥黑 | 来源:发表于2022-01-26 08:27 被阅读0次

Unity 单例模式

public class GameManager : MonoBehaviour
{
    public static GameManager Instance { get; private set; }
    public int Value { get; set; } = 0;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(this);
            GameData.Instance.Init();
        }
    }
}

...
    public class JsonData
    {
        public Player PlayerData = new Player();
        public SignData SignData = new SignData();
    }

    public class GameData
    {
        private JsonData jsonData = new JsonData();
        public JsonData JsonData { get => jsonData; set => jsonData = value; }

        #region config文件
        public Translations translation = ScriptableObject.CreateInstance<Translations>();
        public ExcelQuestionsManager excelQuestions = ScriptableObject.CreateInstance<ExcelQuestionsManager>();
        public ExcelDialoguesManager dialoguesManager = ScriptableObject.CreateInstance<ExcelDialoguesManager>();
        /// <summary>
        /// 加载数据表
        /// </summary>
        public void LoadCofig()
        {
            translation = Resources.Load<Translations>("Configs/Translation");
            excelQuestions = Resources.Load<ExcelQuestionsManager>("Configs/Questions");
            dialoguesManager = Resources.Load<ExcelDialoguesManager>("Configs/Dialogues");
        }
        #endregion

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

单例模式在开发过程中十分常见,所以我们经常会使用泛型写一个单例模式的基类,这样我们就可以通过继承该基类轻松实现单例模式,代码如下所示:

public class Singleton<T> : MonoBehaviour where T : Singleton<T>
{
    public static T Instance { get; private set; }

    protected void Awake()
    {
        if (Instance == null)
        {
            Instance = (T) this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

我们使用 Singleton 基类实现我们的 GameManager,代码如下所示:

public class GameManager : Singleton<GameManager>
{
    public int Value { get; set; } = 0;
}

相关文章

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 2020-07-02 - C#单例

    C#单例模式 使用懒加载模式创建, 写法比较优雅.

  • C# 单例

    Unity 单例模式[https://www.jianshu.com/p/97e4758ff4b4] 单例模式在开...

  • Unity 游戏框架搭建 (三) MonoBehaviour单例

      上一篇文章讲述了如何设计C#单例的模板。也随之抛出了问题:如何设计接收MonoBehaviour生命周期的单例...

  • Unity 游戏框架搭建 (三) MonoBehaviour单例

    上一篇文章讲述了如何设计C#单例的模板。也随之抛出了问题: 如何设计接收MonoBehaviour生命周期的单例的...

  • c# 单例模式

    单例模式的实现分为两种:饿汉式和懒汉式这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创...

  • c# 单例模式

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。 connection db 非托管资源 read file...

  • C#实现设计模式 —— 单例模式

    本文为转载,原文:C#实现设计模式 —— 单例模式 介绍 作为对象的创建模式,单例模式确保某一个类只有一个实例,而...

  • Unity、C#单例模式

    microsoft文档:https://docs.microsoft.com/zh-cn/previous-ver...

  • C# 单例的实现

    1. 静态单例 2.延时单例 注意把构造函数写成private,让他不能通过new获得。

网友评论

      本文标题:C# 单例

      本文链接:https://www.haomeiwen.com/subject/cbdhcrtx.html