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# 单例

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