国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity設(shè)計(jì)模式之單例模式

這篇具有很好參考價(jià)值的文章主要介紹了Unity設(shè)計(jì)模式之單例模式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Unity設(shè)計(jì)模式之單例模式

定義

單例模式(Singleton)是設(shè)計(jì)模式中很常見的一種設(shè)計(jì)模式,目的是為了讓一個(gè)類在程序運(yùn)行期間有且僅有一個(gè)實(shí)例,且方便全局訪問。

實(shí)現(xiàn)

1、私有的構(gòu)造函數(shù)。

2、含有一個(gè)該類的靜態(tài)私有對象。

3、靜態(tài)的公有函數(shù)或?qū)傩裕奖阌脩魟?chuàng)建或者獲取它本身的靜態(tài)私有對象。

適用場景

當(dāng)項(xiàng)目中的某一個(gè)對象,在程序運(yùn)行的過程中,只有一個(gè)對象,可以使用單例模式。

例如:資源管理類,日志管理類等,受項(xiàng)目影響比較小,可以多個(gè)項(xiàng)目共同使用。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

1、單例模式只生成一個(gè)實(shí)例,限制對象數(shù)量,減少內(nèi)存開支和系統(tǒng)性能消耗。

2、使用方便,提供全局訪問的函數(shù)或?qū)傩浴?/p>

缺點(diǎn)

1、容易為了使用方便造成過度使用的問題,但并不是要求設(shè)計(jì)者不使用這個(gè)模式,而是在仔細(xì)設(shè)計(jì)和特定的前提下,適當(dāng)使用。

舉例

C# 單例


/// <summary>
/// 一個(gè)簡單的單例
/// </summary>
public class Test
{
    #region Instance

    private static Test _Instance;
    public static Test Instance
    {
        get
        {
            if (_Instance == null)
            {
                _Instance = new Test();
            }
            return _Instance;
        }
    }

    private Test() { }
    #endregion
}

Unity mono單例

相比于C#單例,mono單例需要注意的是

1、創(chuàng)建對象的時(shí)候,需要創(chuàng)建一個(gè)相應(yīng)的對象,然后將腳本添加。

2、對象Awake的時(shí)候,需要判斷是否已經(jīng)創(chuàng)建了對象,如果創(chuàng)建了,需要銷毀當(dāng)前對象。

3、我這里在OnDestroy的時(shí)候,把靜態(tài)變量銷毀了,是因?yàn)橛行┻壿嬂锩婵赡苄枰N毀這個(gè)對象,重新創(chuàng)建。

using UnityEngine;

/// <summary>
/// 一個(gè)簡單的mono單例
/// </summary>
public class Test : MonoBehaviour
{
    #region Instance
    private static Test _Instance;
    public static Test Instance
    {
        get
        {
            if (!_Instance)
            {
                _Instance = GameObject.FindObjectOfType<Test>();
                if (!_Instance)
                {
                    GameObject obj = new GameObject();
                    _Instance = obj.AddComponent<Test>();
                }
            }
            return _Instance;
        }
    }

    private void Awake()
    {
        if (_Instance)
        {
            Destroy(gameObject);
        }
    }

    private void OnDestroy()
    {
        _Instance = null;
    }
    #endregion
}

通用mono單例

要做一個(gè)通用的mono單例,這里我們需要使用泛型來實(shí)現(xiàn)一個(gè)基類。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// mono單例
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
    protected static T _instance;

    /// <summary>
    /// 是否實(shí)例化
    /// </summary>
    public static bool initialized;

    public static T Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = FindObjectOfType<T>();
                if (FindObjectsOfType<T>().Length > 1)
                {
                    return _instance;
                }
                if (_instance == null)
                {
                    string name = typeof(T).Name;
                    GameObject obj = GameObject.Find(name);
                    if (obj == null)
                    {
                        obj = new GameObject(name);
                    }
                    _instance = obj.AddComponent<T>();
                    DontDestroyOnLoad(obj);
                }
            }
            initialized = true;
            return _instance;
        }
    }

    protected virtual void Awake()
    {
        if (initialized)
        {
            Destroy(gameObject);
        }
    }

    protected virtual void OnDestroy()
    {
        _instance = null;
        initialized = false;
    }
}

實(shí)現(xiàn)類

using UnityEngine;

/// <summary>
/// 一個(gè)簡單的mono單例
/// </summary>
public class Test : MonoSingleton<Test>
{
    public void MonoTest() {
        Debug.Log("test");
    }
}

尾語

如果有說的不好的地方,歡迎各位大佬批評指正。文章來源地址http://www.zghlxwxcb.cn/news/detail-407320.html

到了這里,關(guān)于Unity設(shè)計(jì)模式之單例模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式之單例模式(懶漢, 餓漢)

    設(shè)計(jì)模式之單例模式(懶漢, 餓漢)

    單例模式是一種常用的軟件設(shè)計(jì)模式, 該模式的主要目的是確保某一個(gè)類在內(nèi)存中只能有一個(gè)實(shí)例對象, 通過單例模式的方法創(chuàng)建的類在當(dāng)前進(jìn)程中只有一個(gè)實(shí)例對象. 常見的單例模式有兩種: 餓漢式, 這里的 “餓” 意義表述不夠清晰, 用 “急” 來表述意義更加容易聯(lián)想一些

    2024年02月22日
    瀏覽(20)
  • C#--設(shè)計(jì)模式之單例模式

    C#--設(shè)計(jì)模式之單例模式

    單例模式大概是所有設(shè)計(jì)模式中最簡單的一種,如果在面試時(shí)被問及熟悉哪些設(shè)計(jì)模式,你可能第一個(gè)答的就是單例模式。 單例模式的實(shí)現(xiàn)分為兩種: 餓漢式:在靜態(tài)構(gòu)造函數(shù)執(zhí)行時(shí)就立即實(shí)例化。 懶漢式:在程序執(zhí)行過程中第一次需要時(shí)再實(shí)例化。 兩者有各自適用的場景

    2024年02月14日
    瀏覽(12)
  • 淺談設(shè)計(jì)模式之單例模式

    淺談設(shè)計(jì)模式之單例模式

    單例模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。單例模式指的是 單一的一個(gè)類 ,該類負(fù)責(zé)創(chuàng)建自己的對象,并且保證該 對象唯一 。該類提供了一種訪問其唯一對象的方法,外部需要調(diào)用該類的對象可以通過方法獲取,不需要實(shí)例化類的對象。 關(guān)鍵點(diǎn): 單例

    2024年02月16日
    瀏覽(20)
  • c++設(shè)計(jì)模式之單例模式

    一個(gè)類無論創(chuàng)建多少對象 , 都只能得到一個(gè)實(shí)例 如上述代碼中,我們通過new運(yùn)算符創(chuàng)建出了類A的三個(gè)對象實(shí)例,而我們現(xiàn)在要做的是,如何設(shè)計(jì)類A,使得上述代碼運(yùn)行之后永遠(yuǎn)只產(chǎn)生同一個(gè)對象實(shí)例 ????????我們知道,一個(gè)類對象是通過這個(gè)類的構(gòu)造函數(shù)創(chuàng)建的,因此

    2024年01月19日
    瀏覽(26)
  • 萬字解析設(shè)計(jì)模式之單例模式

    萬字解析設(shè)計(jì)模式之單例模式

    單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 這種模式涉及到一個(gè) 單一 的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時(shí)確保 只有單個(gè)對象被創(chuàng)建 。這個(gè)類提供了一種訪問其唯一的對象的方式,

    2024年02月08日
    瀏覽(28)
  • C++設(shè)計(jì)模式創(chuàng)建型之單例模式

    一、概述 ? ? ? ? 單例模式也稱單態(tài)模式,是一種創(chuàng)建型模式,用于創(chuàng)建只能產(chǎn)生一個(gè)對象實(shí)例的類。例如,項(xiàng)目中只存在一個(gè)聲音管理系統(tǒng)、一個(gè)配置系統(tǒng)、一個(gè)文件管理系統(tǒng)、一個(gè)日志系統(tǒng)等,甚至如果吧整個(gè)Windows操作系統(tǒng)看成一個(gè)項(xiàng)目,那么其中只存在一個(gè)任務(wù)管理

    2024年02月14日
    瀏覽(29)
  • Gof23設(shè)計(jì)模式之單例模式(完整)

    單例模式(Singleton pattern)是Java中最簡單的設(shè)計(jì)模式之一。這種設(shè)計(jì)模式屬于創(chuàng)建型模型,它提供了一種創(chuàng)建對象的最佳方式。 這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時(shí)確保只有單個(gè)對象被創(chuàng)建。這個(gè)類提供了一種訪問其唯一的對象的方式,可以直接訪

    2024年02月10日
    瀏覽(26)
  • 深入理解設(shè)計(jì)模式-創(chuàng)建型之單例模式

    如果有些數(shù)據(jù)在系統(tǒng)中應(yīng)該且只能保存一份,那就應(yīng)該設(shè)計(jì)為單例類。 如:配置類:在系統(tǒng)中,我們只有一個(gè)配置文件,當(dāng)配置文件被加載到內(nèi)存之后,應(yīng)該被映射為一個(gè)唯一的【配置實(shí)例】,此時(shí)就可以使用單例,當(dāng)然也可以不用。 全局計(jì)數(shù)器:我們使用一個(gè)全局的計(jì)數(shù)

    2024年02月12日
    瀏覽(24)
  • 【Java 設(shè)計(jì)模式】創(chuàng)建型之單例模式

    【Java 設(shè)計(jì)模式】創(chuàng)建型之單例模式

    在軟件開發(fā)中,單例模式是一種常見的設(shè)計(jì)模式, 它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn) 。單例模式在需要控制某些資源,如數(shù)據(jù)庫連接池、線程池等共享資源的情況下非常有用。在本文中,我們將介紹 Java 設(shè)計(jì)模式中的單例模式,了解其實(shí)現(xiàn)方式、使用場景

    2024年01月18日
    瀏覽(26)
  • 跟著GPT學(xué)設(shè)計(jì)模式之單例模式

    單例設(shè)計(jì)模式(Singleton Design Pattern)一個(gè)類只允許創(chuàng)建一個(gè)對象(或者實(shí)例),那這個(gè)類就是一個(gè)單例類,這種設(shè)計(jì)模式就叫作單例設(shè)計(jì)模式,簡稱單例模式。 單例有幾種經(jīng)典的實(shí)現(xiàn)方式,它們分別是:餓漢式、懶漢式、雙重檢測、靜態(tài)內(nèi)部類、枚舉。 處理資源訪問沖突,

    2024年02月05日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包