單例模式我相信是全部設計模式之中運用最普遍的設計模式之一。設計模式
今天咱們就來看看在unity中如何使用單例模式,在unity中,咱們分兩種單例,一種是繼承monobehavior的單例,一種是普通單例。多線程
1.MonoBehavior單例學習
其實在unity中,若是腳本是繼承monobehavior,那麼使用起單例來更加簡單。this
只須要在Awake()裏面,添加一句instance = this;spa
using UnityEngine; using System.Collections; public class test2 : MonoBehaviour { public static test2 instance; // Use this for initialization void Awake () { instance = this; } // Update is called once per frame void Update () { } }
2.普通類的單例線程
using UnityEngine; using System.Collections; public class test2 { private static test2 instance; public static test2 Instance { get { if (null == instance) instance = new test2(); return instance; } set { } } }
那麼問題也就來了,細心的讀者會發現,若是項目中有不少個單例,那麼咱們就必須每次都寫這些代碼,有什麼辦法能夠省去這些沒必要要的代碼呢?有,那就是面向對象最重要的思想:繼承。設計
今天咱們就來學習下,本身封裝一個單例類,只要項目中用到單例的話,就從這個單例類繼承,把它變成單例。對象
public class Singleton<T> where T : new() { private static T s_singleton = default(T); private static object s_objectLock = new object(); public static T singleton { get { if (Singleton<T>.s_singleton == null) { object obj; Monitor.Enter(obj = Singleton<T>.s_objectLock);//加鎖防止多線程建立單例 try { if (Singleton<T>.s_singleton == null) { Singleton<T>.s_singleton = ((default(T) == null) ? Activator.CreateInstance<T>() : default(T));//建立單例的實例 } } finally { Monitor.Exit(obj); } } return Singleton<T>.s_singleton; } } protected Singleton() { }