MonoBehaviour单例的另外一种省事的写法

Posted 非法关键字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MonoBehaviour单例的另外一种省事的写法相关的知识,希望对你有一定的参考价值。

 1 using UnityEngine;
 2 
 3 public class CommSystem: SingletonGeneric<CommSystem>
 4 {
 5     public static string version = "v1.0";
 6     private static CommSystemStub stub = (new GameObject("CommSystemStub")).AddComponent<CommSystemStub>();
 7 }
 8 
 9 public sealed class CommSystemStub : MonoBehaviour
10 {
11     private void Awake()
12     {
13         DontDestroyOnLoad(gameObject);
14     }
15 
16     private void Start()
17     {
18         
19     }
20 
21     private void Update()
22     {
23         
24     }
25 
26     private void OnDestroy()
27     {
28 
29     }
30 }
CommSystem是普通的Class
 1 public class SingletonGeneric<T> where T: class, new()
 2 {
 3     static private T _instance;
 4     static private readonly object th_safe = new object();
 5     static public T Instance
 6     {
 7         get
 8         {
 9             if (_instance == null)
10             {
11                 lock (th_safe)
12                 {
13                     if (_instance == null)
14                         _instance = new T();
15                 }
16             }
17             return _instance;
18         }
19     }
20 }

 下面的改写让泛型单例支持使用Private的构造函数,这样做更严谨:

 1 using System;
 2 
 3 public class SingletonGeneric<T> where T: class
 4 {
 5     static private T _instance;
 6     static private readonly object th_safe = new object();
 7     static public T Instance
 8     {
 9         get
10         {
11             if (_instance == null)
12             {
13                 lock (th_safe)
14                 {
15                     if (_instance == null)
16                         //_instance = new T();
17                         _instance = (T) Activator.CreateInstance(typeof(T), true);
18                 }
19             }
20             return _instance;
21         }
22     }
23 }

 

以上是关于MonoBehaviour单例的另外一种省事的写法的主要内容,如果未能解决你的问题,请参考以下文章

Unity单例模式(普通单例和继承MonoBehaviour的单例)

单例的7种写法

java单例的几种写法

单例模式

关于java中无法实现真正单例的论证

C++ 单例模式总结与剖析