arcore之路-unity开发从入门到实践_Unity游戏开发——单例模式的最佳实践
0.前言
StarryFun:Unity游戲開(kāi)發(fā)——關(guān)于單例模式的理解?zhuanlan.zhihu.com之前一篇文章講了單例模式的簡(jiǎn)單理解,自知其中有很多不嚴(yán)謹(jǐn)?shù)牡胤?#xff0c;由于本萌新也是在學(xué)習(xí)階段,所以去翻看了開(kāi)源的項(xiàng)目都是怎么實(shí)現(xiàn)的,發(fā)現(xiàn)了一個(gè)比較完整詳細(xì)的解決方案,并且給提取了出來(lái),準(zhǔn)備當(dāng)作工具在項(xiàng)目中復(fù)用,接下來(lái)給大家聊一下這個(gè)單例框架的實(shí)現(xiàn)思路和使用方法。
1.單例框架介紹
先聊聊這個(gè)單例框架都有什么玩法
- 可以減少寫(xiě)重復(fù)代碼
- 使用屬性標(biāo)簽更有條理的管理單例模塊
- 可以控制單例的生命周期
- 可以選擇是否開(kāi)放自身實(shí)例的獲取
- 即有基于monobehaviour生命周期的單例,也有類(lèi)的單例
單例框架是由兩部分組成,這里我們主要介紹擁有MonoBehaviour生命周期的單例,類(lèi)的單例同理所以就不重復(fù)介紹了
單例模塊所有腳本- ISingleton:一個(gè)接口,里面也只有一個(gè)初始化方法。使用接口有兩個(gè)作用,一對(duì)單例進(jìn)行約束,二是提供統(tǒng)一的初始化接口
- MonoSingleton:這個(gè)是開(kāi)放了外界對(duì)自身實(shí)例進(jìn)行訪(fǎng)問(wèn)的單例寫(xiě)法,也是比較常規(guī)的玩法,使用的方法是繼承它就可以了
- MonoSingletonCreator:一個(gè)單例的創(chuàng)建器,對(duì)特殊情況的處理和實(shí)例的創(chuàng)建都在這里完成,屬于一個(gè)比較核心的類(lèi)
- MonoSingletonPath:通過(guò)屬性標(biāo)簽來(lái)指定全局單例在場(chǎng)景中的路徑,目的是讓用戶(hù)管理單例模塊更有條例一些,核心思想是反射+Attribute
- MonoSingletonProperty:這個(gè)是關(guān)閉了外界對(duì)自身實(shí)例的訪(fǎng)問(wèn),也就是實(shí)例私有化,對(duì)外界也只提供靜態(tài)方法,這樣做有兩個(gè)好處:1.使成員變量更安全,尤其是多人協(xié)作的時(shí)候,做了這個(gè)限制也就降低了一些未知的風(fēng)險(xiǎn)。2.調(diào)用方式為“單例名.方法名”,這比“單例名.Instance.方法名”少了一步,作為一個(gè)懶人,使用體驗(yàn)極佳。
3.使用方式
- 單例的實(shí)現(xiàn)
2. 通過(guò)屬性器實(shí)現(xiàn)單例
using QF; using UnityEngine;// 第一步,引入ISingleton,并實(shí)現(xiàn)接口方法 public class Class2MonoSingletonProperty : MonoBehaviour, ISingleton {public int myFirstIndex;// 第二步,使用屬性器,拿到自身實(shí)例,并且私有化private static Class2MonoSingletonProperty mInstance{get{return MonoSingletonCreator.CreateMonoSingleton<Class2MonoSingletonProperty>();}}// 接口提供的初始化方法,可以自己控制單例的初始化時(shí)機(jī)public void OnSingletonInit(){Debug.Log(this.name +" : OnInit");}// 這個(gè)一般用不到,感覺(jué)可以考慮不實(shí)現(xiàn)這個(gè)方法public void Dispose(){MonoSingletonProperty<Class2MonoSingletonProperty>.Dispose();}// 自定義的一個(gè)靜態(tài)方法public static void FirstFunc(int firstIndex){// 因?yàn)樽陨韺?shí)例私有化了,只能通過(guò)這種方式獲取成員變量mInstance.myFirstIndex = firstIndex;}// 剩下的就跟mono生命周期一樣了// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){} }- 單例的使用
首先這些單例不需要手動(dòng)掛載到場(chǎng)景中,使用時(shí)直接調(diào)用就好了
using UnityEngine;public class MonoSingletonTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){// 繼承單例的使用法法Class2MonoSingleton.Instance.Func();// 屬性器單例的使用方法:類(lèi)名+靜態(tài)方法Class2MonoSingletonProperty.Func(1);} }如果想讓單例管理的更有條例,可以使用標(biāo)簽屬性(Attribute)
4.總結(jié)
以上代碼取自QF框架中的單例模塊,在我看來(lái)已經(jīng)可以滿(mǎn)足項(xiàng)目中的各種需求了,使用起來(lái)也很順手,也非常貼合之前我對(duì)單例模式的理解,也算是對(duì)于單例的最佳實(shí)踐了。下面是QF框架的下載地址,大家可以只使用其中的單例模塊,當(dāng)然也可以嘗試其他更厲害的功能。
QF框架下載地址
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的arcore之路-unity开发从入门到实践_Unity游戏开发——单例模式的最佳实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu17.10下安装TIM
- 下一篇: 节流防抖