Unity3d設計模式之單例模式

單例模式我相信是全部設計模式之中運用最普遍的設計模式之一。設計模式

 

今天咱們就來看看在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()
		{
		}
相關文章
相關標籤/搜索