Proxy是一種設計模式。Wiki上是這麼說的:
A proxy, in its most general form, is a class functioning as an interface to another thing. The other thing could be anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.
不過今天的內容跟這個沒太多關係。
最近碰到一個狀況。
我們在遊戲場景裡頭產生了很大量的物件,大約五千個吧。由於程式結構的關係,並沒有利用動態的方式管理這些物件,以致這五千個物件使用了很大量的記憶體,必須要想辦法節省下來。
第一個想法當然是把這些物件改成動態管理,需要的生成,不需要的就釋放掉。不過這麼一來,物件生成的順序、物件之間的關聯性、相依性,就造成了很大的困擾。我們必須從核心程式去調整,甚至在資料方面都必須一起修改。怎麼算,都是一個不小的手術,大概是半身麻醉的等級。
就在我塗塗改改,畫著結構設計圖,想著要怎麼調整程式結構的時候,突然間,Proxy出現了。
我將這些物件套用Proxy結構,把物件之間的關聯性和相依性,保留在Proxy物件中,占用比較大量記憶體的資料部分,就改用動態的管理。需要的時候,由Proxy物件來產生,用完了,也從Proxy物件去釋放。至於Proxy物件呢,就像原先的程式結構一樣,遊戲場景裡放了五千個。
於是乎,物件生成的順序不需要調整,物件之間的關聯性、相依性不需要調整,核心程式也不需要動大手術,只需要在這些場景物件上,把Proxy模式導入。
所以Proxy不只是設計模式,它還成了一種改善程式品質的手法。
不過,最後實做的結果又不太一樣了。
因為原來的物件裡面,早已經將資料部分分離出來,所以我只是修改了幾行程式碼,改成動態的取得資料以及釋放資料。
搞了半天,如此而已..
沒有留言:
張貼留言