unity3d中單例模式兩種簡單寫法與對比

一、

public class UlManager
{private static UlManager instance;private void Awake(){if(instance != null)Destroy(this);else instance = this;}
}

二、

public class UlManager
{private static UlManager instance;public static UlManager Instance{get{if (instance == null)instance = new UlManager();else return instance;}}
}

初始化時機:
第一種方式:在 Awake() 方法中進行初始化。這意味著當對象被實例化時,Awake() 方法會被調用,首先,代碼檢查是否已經存在了該類的一個實例。這通過檢查 instance 變量是否為 null 來實現。如果 instance 不為 null,這意味著已經存在一個實例,那么當前的對象就不需要再存在了,所以使用 Destroy(this) 來銷毀當前對象(即當前腳本所附加的對象)。如果 instance 為 null,則將當前對象賦值給 instance 變量,表示該對象是這個類的實例
第二種方式:在訪問 Instance 屬性時進行初始化。當第一次訪問 Instance 屬性時,會檢查 instance 是否為 null,如果是,則創建一個新的實例并賦值給 instance。

處理重復實例:
第一種方式:在 Awake() 方法中檢查是否已經存在一個實例,如果已經存在則銷毀當前對象,以確保只有一個實例存在。
第二種方式:在 Instance 屬性中檢查是否已經存在一個實例,如果已經存在則直接返回該實例,這樣可以確保只有一個實例存在,并且只有在需要使用實例時才進行初始化。

返回值類型:
第一種方式:沒有提供靜態屬性或方法來獲取實例,因此在外部無法直接訪問實例,也無法使用 UlManager.instance 來獲取實例。如果需要訪問實例,則需要將 instance 字段設置為 public,這樣才能在外部訪問。
第二種方式:通過靜態屬性 Instance 返回實例,外部可以直接通過 UlManager.Instance 訪問單例實例,這樣更加方便。

既然第一種方法無法在外部訪問實例,那為什么還算是單例模式呢?
單例模式的核心思想是確保一個類只有一個實例,并提供全局訪問點來訪問該實例。第一種方法在 Awake() 方法中確保了只有一個實例存在,因此符合單例模式的定義。盡管在外部不能直接訪問實例,但這并不影響它是單例模式的一種實現。

雖然第一種方法不能在外部直接訪問實例,但仍然可以通過提供一些其他方法來訪問實例,例如提供一個靜態方法或屬性來返回實例。再例如,你可以將 instance 字段設置為 public,然后在外部通過 UlManager.instance 來訪問實例。雖然這種方式不夠直觀和安全,但它仍然可以用作單例模式的一種實現。

綜上所述,第一種方法雖然在訪問實例上不夠方便,但它仍然滿足了單例模式的定義,因為它確保了只有一個實例存在,并提供了一種全局訪問該實例的方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716210.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ChatGPT聊YOLO

最近ChatGPT大伙,其概括摘要能力非常強。YOLO系列算法也是目標檢測領域非常重要的一個研究路線,那么ChatGPT是如何看待各個YOLO算法的呢?那我們去問問它如何看待各個版本的YOLO。 截止到2021年9月,YOLOv6尚未發布。因此&#xff0…

類復習【C#】

【訪問級別】【修飾】【返回類型】 類名 : 【被繼承類】【被繼承接口】 { 字段; 屬性; 默認構造器;// 無參構造器 有參構造器; 私有方法; public 公共方法; } 修飾: 修飾符【C#】-CSDN…

pycharm實現上傳excel生成word

下載需要的依賴包 pip install openpyxl python-docx flaskmain.py文件 from flask import Flask, request, render_template from openpyxl import load_workbook from docx import Documentapp Flask(__name__, template_foldertemplates)app.route(/) def index():return…

小程序面試題:js、vue、uni、小程序的頁面傳參方式區別

js、vue、uni、小程序的頁面傳參方式區別? 1、 js傳參 通過location.href跳轉傳參和接收參數,url后面拼接參數來進行跳轉傳參。 2、 vue傳參 可以通過標簽router-link的to屬性跳轉傳參,也可以通過事件里的this.$router.push跳轉傳參。傳參有…

寒假作業Day 03

寒假作業Day 03 一、選擇題 在C語言中,字符型指針char *p;通常用于指向字符數組(即字符串)的首字符。對于給定的選項,我們來分析每一個選項是否可以將字符串正確地賦值給p: A: pgetchar(); getchar()函數從標準輸入讀…

K8S—Pod控制器

目錄 1.什么是POD控制器 2.POD控制器有幾種類型 3.POD與控制器之間的關系 4.示例 4.1 Deployment 4.2 SatefulSet ①為什么要有headless? ②為什么要有volumeClainTemplate? ③服務發現:就是應用服務之間相互定位的過程。 ④K8S里服…

圖的簡單介紹

定義及術語 G(V,E):圖G的頂點集為V,邊集為E。分為有向圖和無向圖兩類。 頂點的度:與該結點相連的邊的條數。 出度:頂點的出邊條數 入度:頂點的入邊條數 頂點的權值稱為點權,邊的權值稱為邊權。 存儲 1.鄰…

SpringCache【緩存接口返回值信息】【前端訪問后端,后端訪問數據庫(可以緩存這個過程,前端訪問后端,保存記錄,下次訪問直接返回之前的數據)】

SpringCache 針對不同的緩存技術需要實現不同的CacheManager:注解入門程序CachePut注解CacheEvict注解Cacheable注解 Spring Cache是一個框架,實現了基于注解的緩存功能,只需要簡單地加一個注解,就能實現緩存功能,大大…

Mongodb基礎(node.js版)

一、Mongodb 介紹 Mongodb 是一個文檔數據庫,以文檔形式存儲數據,格式類似于 JSON 與 Mysql 的特點及選型對照 MongodbMysql關系類型非關系型關系型存儲類型文檔存儲(類似于寫 Word )表格存儲 (類似于寫 Excle&…

Java玩轉《啊哈算法》之模擬鏈表

人應該支配習慣,而絕不是讓習慣支配人。一個人要是不能改掉壞習慣,那么他就一文不值。 目錄 緣代碼地址模擬鏈表創建遍歷打印插入插入優化 完整代碼 緣 各位小伙伴們好呀!本人最近看了下《啊哈算法》,寫的確實不錯。 但稍顯遺憾…

【C++】string 類 ( 上)

標準庫中的string類 注意: 1. string是表示字符串的字符串類 2. 該類的接口與常規容器的接口基本相同,再添加了一些專門用來操作string的常規操作。 比特就業課 3. string在底層實際是:basic_string模板類的別名,typedef basi…

python爬蟲之selenium知識點記錄

selenium 一、前期準備 1、概述 selenium本身是一個自動化測試工具。它可以讓python代碼調用瀏覽器。并獲取到瀏覽器中加載的各種資源。 我們可以利用selenium提供的各項功能。 幫助我們完成數據的抓取。 2、學習目標 掌握 selenium發送請求,加載網頁的方法 掌…

Stable-Diffusion ubuntu服務器部署,報錯解決方法(小白教程)

Stable Diffusion是一個深度學習模型,專注于生成高質量的圖像。它由CompVis團隊與Stability AI合作開發,并在2022年公開發布。這個模型使用文本提示(text prompts)生成詳細、逼真的圖像,是目前人工智能圖像生成領域的一…

逆向案例四:360k靜態和精靈數據動態AES解密,用js的方法

一、360K 網頁鏈接:https://www.36kr.com/p/2672600261670407 頁面中有靜態的需要解密的內容,確定html包,確定方法 1.1方法步驟 在下方的搜索中輸入decrypt(或者關鍵字window.initialState ,進入js文件 在AES.decrypt處打上斷點&#xff0…

機器學習-03-機器學習算法流程

總結 本系列是機器學習課程的第02篇,主要介紹機器學習中專家系統的應用介紹 本門課程的目標 完成一個特定行業的算法應用全過程: 定義問題(Problem Definition) -> 數據收集(Data Collection) -> 數據分割(Dataset Spit…

[LeetBook]【學習日記】類鏈表反轉——尋找倒數第cnt個元素

來源于「Krahets」的《圖解算法數據結構》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 題目描述 訓練計劃 II 給定一個頭節點為 head 的鏈表用于記錄一系列核心肌群訓練項目編號,請查找并返回倒數第 cnt 個訓練項目編號。 示例 1&#xff1…

守護無價數據:文件備份的重要性與實用策略

一、數據安全:為何文件備份至關重要 在數字化時代,我們的生活和工作越來越離不開電子設備與其中的文件數據。這些文件可能包含重要的工作文檔、珍貴的家庭照片、個人的創意作品等,它們是我們回憶的載體,也是我們工作和創新的基石…

PDF Expert for Mac v3.9.2中文激活版下載

PDF Expert for Mac是一款易于使用的 PDF 編輯器和注釋器,專為 Mac 設備設計。它允許用戶輕松查看、編輯、簽名、注釋和共享 PDF。該軟件使用戶能夠向他們的 PDF 添加文本、圖像、鏈接和形狀,突出顯示和標記文本,填寫表格以及簽署數字文檔。它…

金融行業專題|期貨超融合架構轉型與場景探索合集(2023版)

更新內容: 更新 SmartX 超融合在期貨行業的覆蓋范圍、部署規模與應用場景。新增 CTP 主席系統實踐與評測、容器云資源池等場景實踐。更多超融合金融核心生產業務場景實踐,歡迎下載閱讀電子書《SmartX 金融核心生產業務場景探索文章合集》。 面對不斷變…

Golang中的四個括號

代碼如下,首先第一個括號內容為wk *worker表示這個函數是一個方法,屬于結構體worker的方法,第二個括號內容為say string,是方法的參數,第三個括號內容err error是方法的返回值,第四個括號是work方法內部的匿…