之前在開發(fā)中就發(fā)現(xiàn)“dirty”是一種不錯的解決方案:可以用來延緩計算或者避免不必要的計算。后來在想,這應(yīng)該也算一種設(shè)計模式吧,于是搜索“Dirty設(shè)計模式”,沒有什么結(jié)果,然后換成英文“Dirty design pattern”,搜到了《game programming patterns》這本電子書。書中介紹了Dirty Flag 模式在游戲客戶端的應(yīng)用場景,如果英文不好,這里也有中文翻譯。本文結(jié)合幾個具體的例子,介紹什么是Dirty Flag 模式,并分析該模式的適用場景以及使用注意事項。
什么是Dirty Flag:
簡單來說,就是用一個標(biāo)志位(flag)來表示一組數(shù)據(jù)的狀態(tài),這些數(shù)據(jù)要么是用來計算,或者用來需要同步。在滿足條件的時候設(shè)置標(biāo)志位,然后需要的時候檢查(check)標(biāo)志位。如果設(shè)置了標(biāo)志位,那么表示這組數(shù)據(jù)處于dirty狀態(tài),這個時候需要重新計算或者同步。如果flag沒有被設(shè)置,那么可以不計算(或者利用緩存的計算結(jié)果)。另外,在兩次check之間,即使有多次標(biāo)志位的設(shè)置,也只需要計算一次。
因此,Dirty Flag模式的本質(zhì)作用在于:延緩計算或數(shù)據(jù)同步,甚至減少無謂的計算或者同步。計算比較容易理解,對于同步,后面也會給出例子。在后面的描述中,除非特殊說明,計算也包含了同步。
Dirty Flag使用實例:
首先,《game programming pattern》中的例子非常形象生動,圖文并茂,建議直接閱讀原文,本文不再復(fù)述。接下來介紹幾個其他的例子。
First
游戲開發(fā)中,有大量的物體(Entity)需要每幀tick(AI、位移),每次tick的時候檢查一些條件然后做出反應(yīng)。對于一些entity,可能tick檢查之后發(fā)現(xiàn)什么都不用做,但每次tick檢查也比較耗時,而且出現(xiàn)這種情況的概率還很高。
利用dirty可以改造一些
網(wǎng)友評論