單例模式在Unity中的應用

2021-06-20 09:08:52 字數 936 閱讀 7311

起因:每個遊戲場景中都會有許多的遊戲物件,而各個遊戲場景之間也是同等的關係。如何去管理它們,是我們要解決的問題。

場景中各指令碼間的直接訪問,會在各指令碼間形成乙個巨大而又混亂的網路,這給以後**的維護帶來了極大的困難。為了避免這種因互動訪問而帶來的過度耦合情況,我們取消掉場景中各指令碼間的直接互動,取而代之的是,讓所有指令碼都只與場景中的乙個特定指令碼互動。

在剛開始使用這種方法時,自己宣告了乙個場景中的全域性指令碼,然後把場景中所有其他需要互動的指令碼宣告為其成員,一旦指令碼間要發生互動,就在指令碼中宣告乙個全域性指令碼的物件,然後通過這個物件去訪問其他的指令碼,從而把直接互動變成了間接互動。這樣做確實解決了指令碼之間直接訪問帶來的高耦合度問題,但是在每個指令碼中都要儲存乙個全域性指令碼的物件,這顯然有些不太合適,浪費了資源。為了進一步解決這個問題,引入了單例模式的應用。

單例模式的定義是:保證乙個類只有乙個例項,並且提供乙個訪問它的全域性訪問點。單例物件的類必須保證只有乙個例項存在。在我們的場景中,全域性指令碼的物件只會建立一次,保證單例,然後它(全域性單例類)提供給各個指令碼訪問單例物件的方法,並且所有其他指令碼的公共資料都會儲存在全域性單例指令碼中。

private

static

glosingleton _globalsingleton;

宣告全域性單例類自身型別的靜態私有成員變數,作為單例物件使用。

public

static

glosingletongetsingleton()

提供獲取單例物件的類的靜態方法。任何對單例物件的訪問都要通過該方法來獲取。

if (null ==_globalsingleton) }}

單例模式的使用在多執行緒併發的情況下必須小心謹慎。因為當唯一例項尚未建立時,如果有兩個執行緒同時呼叫建立方法,那麼它們同時沒有檢測到唯一例項的存在,從而同時各自會建立乙個例項,這違背了單例模式中例項唯一的原則。解決這個問題的辦法是為指示類是否已經例項化的變數提供乙個互斥鎖。

單例模式在DRP中的應用

此次 drp專案主要對企業的物流和資金流進行全面的管理和控制,從而縮短企業的 鏈,為企業節省成本,為管理層提供全面的資訊流。本系統主要包括如下模組,商及其庫存管理 分銷費管理 結賬管理 付款結算管理 統計報表管理 基礎資料管理和系統管理。整個系統採用分層的思想,通過呼叫訪問資料庫類 dbutil 訪...

單例模式在TypeScript中的應用

在oop程式設計中,是用來解決特定問題的總結 最佳實踐 設計模式 23種 擴充套件 資料結構和演算法,與語言無關 構建模式 建立物件,單例,工廠,構建 行為模式 命令,觀察者 mvvm 結構模式 多個元件的關係 mvc架構,熟悉物件導向程式設計是設計模式的基礎 單例模式 singleton模式 類是...

單例模式在DRP中的應用

此次 drp專案主要對企業的物流和資金流進行全面的管理和控制,從而縮短企業的 鏈,為企業節省成本,為管理層提供全面的資訊流。本系統主要包括如下模組,商及其庫存管理 分銷費管理 結賬管理 付款結算管理 統計報表管理 基礎資料管理和系統管理。整個系統採用分層的思想,通過呼叫訪問資料庫類 dbutil 訪...