之前在開(kāi)發(fā)中就發(fā)現(xiàn)“dirty”是一種不錯(cuò)的解決方案:可以用來(lái)延緩計(jì)算或者避免不必要的計(jì)算。后來(lái)在想,這應(yīng)該也算一種設(shè)計(jì)模式吧,于是搜索“Dirty設(shè)計(jì)模式”,沒(méi)有什么結(jié)果,然后換成英文“Dirty design pattern”,搜到了《game programming patterns》這本電子書。書中介紹了Dirty Flag 模式在游戲客戶端的應(yīng)用場(chǎng)景,如果英文不好,這里也有中文翻譯。本文結(jié)合幾個(gè)具體的例子,介紹什么是Dirty Flag 模式,并分析該模式的適用場(chǎng)景以及使用注意事項(xiàng)。

什么是Dirty Flag:

  簡(jiǎn)單來(lái)說(shuō),就是用一個(gè)標(biāo)志位(flag)來(lái)表示一組數(shù)據(jù)的狀態(tài),這些數(shù)據(jù)要么是用來(lái)計(jì)算,或者用來(lái)需要同步。在滿足條件的時(shí)候設(shè)置標(biāo)志位,然后需要的時(shí)候檢查(check)標(biāo)志位。如果設(shè)置了標(biāo)志位,那么表示這組數(shù)據(jù)處于dirty狀態(tài),這個(gè)時(shí)候需要重新計(jì)算或者同步。如果flag沒(méi)有被設(shè)置,那么可以不計(jì)算(或者利用緩存的計(jì)算結(jié)果)。另外,在兩次check之間,即使有多次標(biāo)志位的設(shè)置,也只需要計(jì)算一次。

  因此,Dirty Flag模式的本質(zhì)作用在于:延緩計(jì)算或數(shù)據(jù)同步,甚至減少無(wú)謂的計(jì)算或者同步。計(jì)算比較容易理解,對(duì)于同步,后面也會(huì)給出例子。在后面的描述中,除非特殊說(shuō)明,計(jì)算也包含了同步。

Dirty Flag使用實(shí)例:

  首先,《game programming pattern》中的例子非常形象生動(dòng),圖文并茂,建議直接閱讀原文,本文不再?gòu)?fù)述。接下來(lái)介紹幾個(gè)其他的例子。

First

    游戲開(kāi)發(fā)中,有大量的物體(Entity)需要每幀tick(AI、位移),每次tick的時(shí)候檢查一些條件然后做出反應(yīng)。對(duì)于一些entity,可能tick檢查之后發(fā)現(xiàn)什么都不用做,但每次tick檢查也比較耗時(shí),而且出現(xiàn)這種情況的概率還很高。

    利用dirty可以改造一些

        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式